a
    Ag                  
   @  s6  U d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	 ddl
mZ ddlmZ erd dlZd dlZddl
mZ d	ed
< e	ejjejjf Ze	ejjejjf Ze	ejjejjf Ze	ejjejjf Zded< ddgddggZejdd dd eD ]\ZZzjded< edkr:d dlmZmZ d dlmZmZmZ n.edkrhd dl mZmZ d dl!mZmZmZ W n e"e#fy   Y qY n0 dZ$eZ% qqdZ$dZ%d6ddddddddZ&dd d!d"d#Z'd$d d!d%d&Z(d'dd(d'd)d*d+Z)d,d-d!d.d/Z*e$rG d0d1 d1eZ+d,d1d!d2d3Z,d,d$d!d4d5Z-dS )7    )annotationsN)BytesIO)TYPE_CHECKINGAnyCallableUnion   )Image)is_path)	ImageFiletypeQBufferz
str | None
qt_version6PyQt6Zside6PySide6c                 C  s   | d t jv S )Nr   )sysmodules)version r   J/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/PIL/ImageQt.py<lambda>.       r   T)keyreversez#Callable[[int, int, int, int], int]qRgba)r   	QIODevice)QImageQPixmapr   F   int)rgbareturnc                 C  s   t | |||d@ S )zA(Internal) Turns an RGB color into a Qt compatible color integer.l    )r   )r!   r"   r#   r$   r   r   r   rgbB   s    r&   zQImage | QPixmapzImageFile.ImageFileimr%   c                 C  s   t  }tdkr<zttd}W q@ ty8   ttd}Y q@0 nt}|t|d |  rf| |d n| |d t }|	|
  |  |d t|S )z1
    :param im: QImage or PIL ImageQt object
    r   ZOpenModeFlagZOpenModeZ	ReadWriteZpngppmr   )r   r   getattrr   AttributeErroropenZhasAlphaChannelsaver   writedatacloseseekr	   )r(   bufferZqt_openmoder#   r   r   r   
fromqimageI   s     
r3   r   c                 C  s   t | S N)r3   r(   r   r   r   fromqpixmapf   s    r6   bytesstr)r7   widthmoder%   c                   sv   ddddd| }|| }t |d\}}||r2dnd  d sJ S  fddtt  D }d	|S )
zE
    converts each scanline of data from 8 bit to 32 bit aligned
    r         )1LPI;16r      c                   s,   g | ]$} | |d    d  qS )r       r   .0ir7   Zbytes_per_lineZextra_paddingr   r   
<listcomp>|   s   zalign8to32.<locals>.<listcomp>r   )divmodrangelenjoin)r7   r9   r:   Zbits_per_pixelZbits_per_lineZfull_bytes_per_lineZremaining_bits_per_lineZnew_datar   rF   r   
align8to32j   s    
rL   Image.Image | str | QByteArrayzdict[str, Any]c           	        s  d }d }d}t | dr$t|  d} t| r:t| } d}t| tjsJJ tdkr\tt	dnt	}| j
dkrxt|d}n| j
d	krt|d
}dd tdD }n| j
dkrt|d
}|    d usJ  fddtdt dD }n| j
dkr| d} | dd}t|d}np| j
dkr:| dd}t|d}nL| j
dkr`| dd } t|d}n&|rn|   dt| j
 }t|| j}|pt|  |d | j
}|r|   ||||dS )NFtoUtf8zutf-8Tr   ZFormatr=   ZFormat_Monor>   ZFormat_Indexed8c                 S  s   g | ]}t |||qS r   r&   rC   r   r   r   rG      r   z$_toqclass_helper.<locals>.<listcomp>   r?   c                   s    g | ]}t  ||d    qS )   rO   rC   Zpaletter   r   rG      r   r   rQ   ZRGBZRGBArawZBGRAZFormat_RGB32ZFormat_ARGB32r@   c                 S  s   | d S )NrP   r   )rE   r   r   r   r      r   z"_toqclass_helper.<locals>.<lambda>ZFormat_Grayscale16zunsupported image mode )r/   sizeformat
colortable)hasattrr8   rN   r
   r	   r,   
isinstancer   r*   r   r:   rI   Z
getpaletterJ   converttobytesZpointr0   repr
ValueErrorrT   rL   )	r(   r/   rV   Zexclusive_fpZ	qt_formatrU   msgrT   Z__datar   rR   r   _toqclass_helper   sN    






 
r^   c                      s$   e Zd Zddd fddZ  ZS )ImageQtrM   Noner'   c                   sT   t |}|d | _t | j|d d |d d |d  |d rP| |d  dS )z
            An PIL image wrapper for Qt.  This is a subclass of PyQt's QImage
            class.

            :param im: A PIL Image object, or a file name (given either as
                Python string or a PyQt string object).
            r/   rT   r   r   rU   rV   N)r^   Z_ImageQt__datasuper__init__ZsetColorTable)selfr(   Zim_data	__class__r   r   rb      s    


zImageQt.__init__)__name__
__module____qualname__rb   __classcell__r   r   rd   r   r_      s   r_   c                 C  s   t | S r4   )r_   r5   r   r   r   toqimage   s    rj   c                 C  s*   t | }ttd|}tdkr&|  |S )NZ	fromImager   )rj   r*   r   r   detach)r(   ZqimageZpixmapr   r   r   	toqpixmap   s
    rl   )r   ).
__future__r   r   ior   typingr   r   r   r    r	   Z_utilr
   r   r   r   __annotations__ZQtCoreZ
QByteArrayr   ZQtGuir   r   Zqt_versionssortr   Z	qt_moduleZPyQt6.QtCorer   ZPyQt6.QtGuir   ZPySide6.QtCoreZPySide6.QtGuiImportErrorRuntimeErrorZqt_is_installedr   r&   r3   r6   rL   r^   r_   rj   rl   r   r   r   r   <module>   sX   


3