B
    6d              
   @   s  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dgd	d
gddgddggZ	e	j
dd dd xe	D ]\ZZyedkrd dlmZmZ d dlmZmZmZ ned
krd dlmZmZ d dlmZmZmZ nvedkrd dlmZmZ d dlmZmZmZ eddd n:edkrLd dlmZmZ d dlmZmZmZ eddd W n eefk
rj   wnY nX dZP qnW 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( Z#d)d* Z$dS ),    N)BytesIO   )Image)	deprecate)is_path6ZPyQt6Zside6ZPySide65ZPyQt5Zside2ZPySide2c             C   s   | d t jkS )Nr   )sysmodules)
qt_version r   //tmp/pip-unpacked-wheel-lxgm_btu/PIL/ImageQt.py<lambda>"       r   T)keyreverse)QBuffer	QIODevice)QImageQPixmapqRgbazSupport for PyQt5
   zPyQt6 or PySide6zSupport for PySide2F   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r6y
tj}W q: tk
r2   tj}Y q:X n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   
fromqimageE   s     

r(   c             C   s   t | S )N)r(   )r&   r   r   r   fromqpixmapa   s    r)   c             C   s   ddddd| }|| }t |d\}}||r2dnd }| d }|sJ| S g }	x>tt| | D ]*}
|	| |
| |
d |  d|   q`W d|	S )	zE
    converts each scanline of data from 8 bit to 32 bit aligned
    r         )1LPzI;16r          r   )divmodrangelenappendjoin)byteswidthmodeZbits_per_pixelZbits_per_lineZfull_bytes_per_lineZremaining_bits_per_lineZbytes_per_lineZextra_paddingZnew_datair   r   r   
align8to32o   s    
r:   c             C   s  d }d }d}t | dr$t|  d} t| r:t| } d}tdkrHtjnt}| j	dkr`|j
}n*| j	dkr|j}g }x"tdD ]}|t||| q~W n| j	d	kr|j}g }|  }xtd
t|dD ]}|t|||d    qW n| j	dkr| d} | dd}|j}nt| j	dkr6| dd}|j}nT| j	dkrdt |drd| dd } |j}n&|rr|   dt| j	 }t|| j}	|pt|  |	d
 | j	}
|r|   |
|	||dS )NFtoUtf8zutf-8Tr   r,   r-      r.   r      ZRGBZRGBArawZBGRAzI;16Format_Grayscale16c             S   s   | d S )Nr<   r   )r9   r   r   r   r      r   z"_toqclass_helper.<locals>.<lambda>zunsupported image mode )r#   sizeformat
colortable)hasattrstrr;   r   r   r    r   r   ZFormatr8   ZFormat_MonoZFormat_Indexed8r2   r4   r   Z
getpaletter3   converttobytesZFormat_RGB32ZFormat_ARGB32Zpointr?   r$   repr
ValueErrorr@   r:   )r&   r#   rB   Zexclusive_fpZ	qt_formatrA   r9   Zpalettemsgr@   Z__datar   r   r   _toqclass_helper   sR    





 
rJ   c                   s   e Zd Z fddZ  ZS )ImageQtc                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#   r@   r   r   rA   rB   N)rJ   Z_ImageQt__datasuper__init__ZsetColorTable)selfr&   Zim_data)	__class__r   r   rM      s    



zImageQt.__init__)__name__
__module____qualname__rM   __classcell__r   r   )rO   r   rK      s   rK   c             C   s   t | S )N)rK   )r&   r   r   r   toqimage   s    rT   c             C   s   t | }t|S )N)rT   r   Z	fromImage)r&   Zqimager   r   r   	toqpixmap   s    rU   )r   )%r	   ior    r   Z
_deprecater   Z_utilr   Zqt_versionssortr   Z	qt_moduleZPyQt6.QtCorer   r   ZPyQt6.QtGuir   r   r   ZPySide6.QtCoreZPySide6.QtGuiZPyQt5.QtCoreZPyQt5.QtGuiZPySide2.QtCoreZPySide2.QtGuiImportErrorRuntimeErrorZqt_is_installedr   r(   r)   r:   rJ   rK   rT   rU   r   r   r   r   <module>   sP   



5