o
    Zh                  
   @  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dl	m
Z
 ded	< d
dgddggZejdd dd eD ]X\ZZzCded< ded< ded< ded< ded< edkrjd dlmZmZ d dlmZmZmZ nedkrd dlmZmZ d dlmZmZmZ W n eefy   Y q:w dZeZ ndZdZd.ddZdd  Zd!d" Zd#d$ Z d%d& Z!erG d'd( d(eZ"d/d*d+Z#d,d- Z$dS )0    )annotationsN)BytesIO)Callable   )Image)is_pathz
str | None
qt_version6ZPyQt6Zside6ZPySide6c                 C  s   | d t jv S )Nr   )sysmodules)version r   B/var/www/html/lang_env/lib/python3.10/site-packages/PIL/ImageQt.py<lambda>"   s    r   T)keyreversetypeQBuffer	QIODeviceQImageQPixmapz#Callable[[int, int, int, int], int]qRgba)r   r   )r   r   r   F   c                 C  s   t | |||d@ S )zA(Internal) Turns an RGB color into a Qt compatible color integer.l    )r   )rgbar   r   r   rgb:   s   r   c                 C  s   t  }tdkrztj}W n ty   tj}Y nw t}||j |  r,| 	|d n| 	|d t
 }||  |  |d t|S )z1
    :param im: QImage or PIL ImageQt object
    r	   Zpngppmr   )r   r   r   ZOpenModeFlagAttributeErrorZOpenModeopenZ	ReadWriteZhasAlphaChannelsaver   writedatacloseseekr   )imbufferZqt_openmoder   r   r   r   
fromqimageA   s"   



r(   c                 C     t | S N)r(   r&   r   r   r   fromqpixmap]      r,   c                   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bytesZbytes_per_lineZextra_paddingr   r   
<listcomp>s   s    zalign8to32.<locals>.<listcomp>    )divmodrangelenjoin)r:   widthmodeZbits_per_pixelZbits_per_lineZfull_bytes_per_lineZremaining_bits_per_lineZnew_datar   r9   r   
align8to32a   s   

rC   c           	        s~  d }d }d}t | drt|  d} t| rt| } d}tdkr$tjnt}| j	dkr/|j
}ns| j	dkrA|j}dd	 td
D }na| j	dkr]|j}|    fdd	tdt dD }nE| j	dkrq| d} | dd}|j}n1| j	dkr| dd}|j}n"| j	dkr| dd } |j}n|r|   dt| j	 }t|| j}|pt|  |d | j	}|r|   ||||dS )NFtoUtf8zutf-8Tr	   r0   r1   c                 S  s   g | ]}t |||qS r   r   r6   r   r   r   r;      s    z$_toqclass_helper.<locals>.<listcomp>   r2   c                   s    g | ]}t  ||d    qS )   rE   r6   paletter   r   r;      s     r   rG   RGBZRGBArawZBGRAr3   c                 S  s   | d S )NrF   r   )r8   r   r   r   r      s    z"_toqclass_helper.<locals>.<lambda>zunsupported image mode )r#   sizeformat
colortable)hasattrstrrD   r   r   r    r   r   ZFormatrB   ZFormat_MonoZFormat_Indexed8r>   Z
getpaletter?   converttobytesZFormat_RGB32ZFormat_ARGB32pointZFormat_Grayscale16r$   repr
ValueErrorrL   rC   )	r&   r#   rN   Zexclusive_fpZ	qt_formatrM   msgrL   Z__datar   rH   r   _toqclass_helper{   sJ   




 



rW   c                      s   e Zd Z fddZ  ZS )ImageQtc                   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).
            r#   rL   r   r   rM   rN   N)rW   Z_ImageQt__datasuper__init__ZsetColorTable)selfr&   Zim_data	__class__r   r   rZ      s   


zImageQt.__init__)__name__
__module____qualname__rZ   __classcell__r   r   r\   r   rX      s    rX   returnc                 C  r)   r*   )rX   r+   r   r   r   toqimage   r-   rc   c                 C  s   t | }t|S r*   )rc   r   Z	fromImage)r&   Zqimager   r   r   	toqpixmap   s   
rd   )r   )rb   rX   )%
__future__r   r
   ior   typingr    r   Z_utilr   __annotations__Zqt_versionssortr   Z	qt_moduleZPyQt6.QtCorer   r   ZPyQt6.QtGuir   r   r   ZPySide6.QtCoreZPySide6.QtGuiImportErrorRuntimeErrorZqt_is_installedr   r   r(   r,   rC   rW   rX   rc   rd   r   r   r   r   <module>   sT   
1
