o
    ë6Wj  ã                
   @  sž  U d dl mZ d dlZd dlmZ ddlmZ ddlmZ dZ	e	r7d dl
mZ d d	lmZ dd
lmZ ded< ded< ddgddggZejdd„ dd� eD ]L\ZZz7ded< edkrpd dlmZmZmZ d dlmZmZmZ nedkrˆd dlmZmZmZ d dlmZmZmZ W n eefy”   Y qNw dZ eZ! ndZ dZ!d<d=d"d#„Z"d>d'd(„Z#d?d*d+„Z$d@d0d1„Z%dAd4d5„Z&e rÃG d6d7„ d7eƒZ'dBd8d9„Z(dCd:d;„Z)dS )Dé    )ÚannotationsN)ÚBytesIOé   )ÚImage)Úis_pathF)ÚCallable)ÚAny)Ú	ImageFileÚtypeÚQBufferz
str | NoneÚ
qt_versionÚ6ÚPyQt6Úside6ÚPySide6c                 C  s   | d t jv S )Nr   )ÚsysÚmodules)Úversion© r   úZ/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/PIL/ImageQt.pyÚ<lambda>*   s    r   T)ÚkeyÚreversez#Callable[[int, int, int, int], int]ÚqRgba)r   Ú
QByteArrayÚ	QIODevice)ÚQImageÚQPixmapr   éÿ   ÚrÚintÚ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%   ÚimúQImage | QPixmapúImageFile.ImageFilec                 C  s    t ƒ }tdkrzttdƒ}W n ty   ttdƒ}Y nw t}| t|dƒ¡ |  ¡ r2|  |d¡ n|  |d¡ tƒ }| 	| 
¡ ¡ | ¡  | d¡ t |¡S )z1
    :param im: QImage or PIL ImageQt object
    r   ÚOpenModeFlagÚOpenModeÚ	ReadWriteÚpngÚppmr   )r   r   Úgetattrr   ÚAttributeErrorÚopenÚhasAlphaChannelÚsaver   ÚwriteÚdataÚcloseÚseekr   )r&   ÚbufferÚqt_openmoder"   r   r   r   Ú
fromqimageI   s"   ÿ

r9   r   c                 C  ó   t | ƒS ©N)r9   ©r&   r   r   r   Úfromqpixmapf   ó   r=   ÚbytesÚwidthÚmodeÚstrc                   sv   dddddœ| }|| }t |dƒ\}}||rdnd ‰ˆ d ‰ˆs%ˆ 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©r?   Úbytes_per_lineÚextra_paddingr   r   Ú
<listcomp>|   s    ÿÿzalign8to32.<locals>.<listcomp>ó    )ÚdivmodÚrangeÚlenÚjoin)r?   r@   rA   Úbits_per_pixelÚbits_per_lineÚfull_bytes_per_lineÚremaining_bits_per_lineÚnew_datar   rN   r   Ú
align8to32j   s   
þ
r\   úImage.Image | str | QByteArrayúdict[str, Any]c           	        s¶  d }d }d}t | dƒrt|  ¡ dƒ} t| ƒrt | ¡} d}t| tjƒs%J ‚tdkr.tt	dƒnt	}| j
dkr;t|dƒ}nƒ| j
d	krOt|d
ƒ}dd„ tdƒD ƒ}no| j
dkrst|d
ƒ}|  ¡ ‰ ˆ d uscJ ‚‡ fdd„tdtˆ ƒdƒD ƒ}nK| j
dkr‰|  d¡} |  dd¡}t|dƒ}n5| j
dkrš|  dd¡}t|dƒ}n$| j
dkr¬|  dd„ ¡} t|dƒ}n|r²|  ¡  dt| j
ƒ› �}t|ƒ‚| j}|pÍt|  ¡ |d | j
ƒ}|rÔ|  ¡  ||||dœS )NFÚtoUtf8zutf-8Tr   ÚFormatrE   ÚFormat_MonorF   ÚFormat_Indexed8c                 S  s   g | ]}t |||ƒ‘qS r   ©r%   rK   r   r   r   rQ   —   s    z$_toqclass_helper.<locals>.<listcomp>é   rG   c                   s    g | ]}t ˆ ||d  … Ž ‘qS )é   rc   rK   ©Úpaletter   r   rQ   œ   s     r   re   ÚRGBÚRGBAÚrawÚBGRAÚFormat_RGB32ÚFormat_ARGB32rH   c                 S  s   | d S )Nrd   r   )rM   r   r   r   r   §   s    z"_toqclass_helper.<locals>.<lambda>ÚFormat_Grayscale16zunsupported image mode )r4   ÚsizeÚformatÚ
colortable)ÚhasattrrB   r_   r   r   r0   Ú
isinstancer   r.   r   rA   rT   Ú
getpaletterU   ÚconvertÚtobytesÚpointr5   ÚreprÚ
ValueErrorro   r\   )	r&   r4   rq   Úexclusive_fpÚ	qt_formatrp   Úmsgro   Ú__datar   rf   r   Ú_toqclass_helper„   sN   






 



r~   c                      s   e Zd Zd‡ fdd„Z‡  ZS )ÚImageQtr&   r]   r$   ÚNonec                   sX   t |ƒ}|d | _tƒ  | j|d d |d d |d ¡ |d r*|  |d ¡ dS 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).
            r4   ro   r   r   rp   rq   N)r~   Ú_ImageQt__dataÚsuperÚ__init__ÚsetColorTable)Úselfr&   Úim_data©Ú	__class__r   r   rƒ   º   s   


üÿzImageQt.__init__)r&   r]   r$   r€   )Ú__name__Ú
__module__Ú__qualname__rƒ   Ú__classcell__r   r   r‡   r   r   ¹   s    r   c                 C  r:   r;   )r   r<   r   r   r   ÚtoqimageÒ   r>   r�   c                 C  s*   t | ƒ}ttdƒ|ƒ}tdkr| ¡  |S )NÚ	fromImager   )r�   r.   r   r   Údetach)r&   ÚqimageÚpixmapr   r   r   Ú	toqpixmapÖ   s
   r’   )r   )
r   r    r!   r    r"   r    r#   r    r$   r    )r&   r'   r$   r(   )r&   r   r$   r(   )r?   r?   r@   r    rA   rB   r$   r?   )r&   r]   r$   r^   )r&   r]   r$   r   )r&   r]   r$   r   )*Ú
__future__r   r   Úior   Ú r   Ú_utilr   ÚTYPE_CHECKINGÚcollections.abcr   Útypingr   r	   Ú__annotations__Úqt_versionsÚsortr   Ú	qt_moduleÚPyQt6.QtCorer   r   r   ÚPyQt6.QtGuir   r   r   ÚPySide6.QtCoreÚPySide6.QtGuiÚImportErrorÚRuntimeErrorÚqt_is_installedr   r%   r9   r=   r\   r~   r   r�   r’   r   r   r   r   Ú<module>   sV   þ€ÿ



3
