o
    * i                  
   @  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rd 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 rG 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6ZPyQt6Zside6ZPySide6c                 C  s   | d t jv S )Nr   )sysmodules)version r   W/home/app/PaddleOCR-VL-test/.venv_paddleocr/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   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"   

r0   r   c                 C     t | S N)r0   r#   r   r   r   fromqpixmapf      r4   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r6   Zbytes_per_lineZextra_paddingr   r   
<listcomp>|   s    zalign8to32.<locals>.<listcomp>    )divmodrangelenjoin)r6   r7   r8   Zbits_per_pixelZbits_per_lineZfull_bytes_per_lineZremaining_bits_per_lineZnew_datar   rE   r   
align8to32j   s   

rL   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}|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"   rB   r   r   r   rF      s    z$_toqclass_helper.<locals>.<listcomp>   r>   c                   s    g | ]}t  ||d    qS )   rP   rB   paletter   r   rF      s     r   rR   RGBZRGBArawZBGRAZFormat_RGB32ZFormat_ARGB32r?   c                 S  s   | d S )NrQ   r   )rD   r   r   r   r      s    z"_toqclass_helper.<locals>.<lambda>ZFormat_Grayscale16zunsupported image mode )r,   sizeformat
colortable)hasattrr9   rO   r   r   r)   
isinstancer   r'   r   r8   rI   Z
getpaletterJ   converttobytespointr-   repr
ValueErrorrW   rL   )	r#   r,   rY   Zexclusive_fpZ	qt_formatrX   msgrW   Z__datar   rS   r   _toqclass_helper   sN   






 



rb   c                      s   e Zd Zd fddZ  ZS )ImageQtr#   rM   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).
            r,   rW   r   r   rX   rY   N)rb   Z_ImageQt__datasuper__init__ZsetColorTable)selfr#   Zim_data	__class__r   r   rf      s   


zImageQt.__init__)r#   rM   r!   rd   )__name__
__module____qualname__rf   __classcell__r   r   rh   r   rc      s    rc   c                 C  r1   r2   )rc   r3   r   r   r   toqimage   r5   rn   c                 C  s*   t | }ttd|}tdkr|  |S )NZ	fromImager   )rn   r'   r   r   detach)r#   ZqimageZpixmapr   r   r   	toqpixmap   s
   rp   )r   )
r   r   r   r   r   r   r    r   r!   r   )r#   r$   r!   r%   )r#   r   r!   r%   )r6   r6   r7   r   r8   r9   r!   r6   )r#   rM   r!   rN   )r#   rM   r!   rc   )r#   rM   r!   r   )*
__future__r   r   ior    r   Z_utilr   TYPE_CHECKINGcollections.abcr   typingr   r	   __annotations__Zqt_versionssortr   Z	qt_moduleZPyQt6.QtCorer   r   r   ZPyQt6.QtGuir   r   r   ZPySide6.QtCoreZPySide6.QtGuiImportErrorRuntimeErrorZqt_is_installedr   r"   r0   r4   rL   rb   rc   rn   rp   r   r   r   r   <module>   sV   



3
