U
    &^W                  
   @   s<  d dl Z d dlmZ ddlmZ ddlmZ ddgdd	ggZejd
d dd eD ]\Z	Z
z^e
dkrd dlmZmZmZ d dlmZmZ n,e
d	krd dlmZmZmZ d dlmZmZ W n eefk
r   Y qRY nX dZ qqRdZdZ	d"ddZdd Zdd Zdd Zdd Zer(G dd deZdd Zd d! ZdS )#    N)BytesIO   )Image)isPath5ZPyQt5Zside2ZPySide2c                 C   s   | d t jkS )Nr   )sysmodules)
qt_version r
   //tmp/pip-install-a1j0c_p1/Pillow/PIL/ImageQt.py<lambda>       r   T)keyreverse)QImageqRgbaQPixmap)QBuffer	QIODeviceF   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   sd   t  }|tj |  r(| |d n| |d t }||  |	  |
d t|S )zs
    :param im: A PIL Image object, or a file name
    (given either as Python string or a PyQt string object)
    Zpngppmr   )r   openr   Z	ReadWriteZhasAlphaChannelsaver   writedatacloseseekr   )imbufferr   r
   r
   r   
fromqimage5   s    
r$   c                 C   s   t | S N)r$   r"   r
   r
   r   fromqpixmapK   s    r'   c                 C   s   dddd| }|| }t |d\}}||r0dnd }| d }|sH| S g }	tt| | D ]*}
|	| |
| |
d |  d|   q\d|	S )zE
    converts each scanline of data from 8 bit to 32 bit aligned
    r      )1LPr          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   
align8to32Y   s    
r7   c              
   C   s  d }d }t | dr t|  d} t| r2t| } | jdkrFtj}n| jdkr|tj	}g }t
dD ]}|t||| qbn| jdkrtj	}g }|  }t
dt|dD ]}|t|||d    qn| jd	kr| d
d}tj}nn| jdkrHz| d
d}W n: tk
r>   |  \}}}}	td||||	f} Y nX tj}ntd| j |prt|  | jd | j}
|
| ||dS )NtoUtf8zutf-8r)   r*      r+   r      RGBrawZBGRXRGBAZBGRAzunsupported image mode %r)r   r"   format
colortable)hasattrstrr8   r   r   r   r5   r   ZFormat_MonoZFormat_Indexed8r/   r1   r   Z
getpaletter0   tobytesZFormat_RGB32SystemErrorsplitmergeZFormat_ARGB32
ValueErrorr7   size)r"   r   r?   r>   r6   Zpaletter   r   r   r   Z__datar
   r
   r   _toqclass_helperu   s@    






rH   c                       s   e Zd Z fddZ  ZS )ImageQtc                    sX   t |}|d | _t | j|d jd |d jd |d  |d rT| |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   r>   r?   N)rH   Z_ImageQt__datasuper__init__rG   ZsetColorTable)selfr"   Zim_data	__class__r
   r   rK      s    
zImageQt.__init__)__name__
__module____qualname__rK   __classcell__r
   r
   rM   r   rI      s   rI   c                 C   s   t | S r%   )rI   r&   r
   r
   r   toqimage   s    rS   c                 C   s&   | j dkr| d} t| }t|S )Nr;   r=   )r5   convertrS   r   Z	fromImage)r"   Zqimager
   r
   r   	toqpixmap   s    

rU   )r   )r   ior    r   Z_utilr   Zqt_versionssortr	   Z	qt_moduleZPyQt5.QtGuir   r   r   ZPyQt5.QtCorer   r   ZPySide2.QtGuiZPySide2.QtCoreImportErrorRuntimeErrorZqt_is_installedr   r$   r'   r7   rH   rI   rS   rU   r
   r
   r
   r   <module>   s8   

*