3

Z                 @   sR  d dl mZ d dlmZ ddlmZ dZdZy,ddlm	Z	m
Z
mZ ddlmZmZ d	ZW n eefk
r   y,ddlm	Z	m
Z
mZ ddlmZmZ d
ZW n^ eefk
r   y,ddlm	Z	m
Z
mZ ddlmZmZ dZW n ek
r   dZY nX Y nX Y nX 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 )   )Image)isPath    )BytesIOTN)QImageqRgbaQPixmap)QBuffer	QIODevice54ZsideF   c             C   s   t | |||d@ S )zA(Internal) Turns an RGB color into a Qt compatible color integer.l    )r   )rgba r   -/usr/lib/python3/dist-packages/PIL/ImageQt.pyrgb+   s    r   c             C   s   t  }|jtj | j r(| j|d n| j|d t }y|j|j  W n& t	k
rr   |jt
|j  Y nX |j  |jd tj|S )zs
    :param im: A PIL Image object, or a file name
    (given either as Python string or a PyQt string object)
    ZpngZppmr   )r	   openr
   Z	ReadWriteZhasAlphaChannelZsaver   writedata	TypeErrorstrcloseseekr   )imbufferr   r   r   r   
fromqimage2   s    
r   c             C   s   t | S )N)r   )r   r   r   r   fromqpixmapL   s    r   c             C   s   dddd| }|| }t |d\}}||r0dnd }| d }|sH| S g }	x>tt| | D ]*}
|	j| |
| |
d |  d|   q^W dj|	S )zE
    converts each scanline of data from 8 bit to 32 bit aligned
    r      )1LPr              )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   
align8to32Z   s    
*r0   c             C   s  d }d }t | dr8ttkr*t| j d} nt| j d} t| rJtj| } | jdkr^t	j
}n| jdkrt	j}g }x"tdD ]}|jt||| q|W n| jdkrt	j}g }| j }xtdt|dD ]}|jt|||d    qW n| jd	kr
| jd
d}t	j}nn| jdkrjy| jd
d}W n: tk
r`   | j \}}}}	tjd||||	f} Y nX t	j}ntd| j |pt| j | 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)hasattrr   r,   Zunicoder1   r   r   r   r.   r   ZFormat_MonoZFormat_Indexed8r(   r*   r   Z
getpaletter)   tobytesZFormat_RGB32SystemErrorsplitmergeZFormat_ARGB32
ValueErrorr0   size)r   r   r8   r7   r/   Zpaletter   r   r   r   Z__datar   r   r   _toqclass_helperw   sD    





 r@   c               @   s   e Zd Zdd ZdS )ImageQtc             C   sX   t |}|d | _tj| | j|d jd |d jd |d  |d rT| j|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   r7   r8   N)r@   Z_ImageQt__datar   __init__r?   ZsetColorTable)selfr   Zim_datar   r   r   rB      s    
zImageQt.__init__N)__name__
__module____qualname__rB   r   r   r   r   rA      s   rA   c             C   s   t | S )N)rA   )r   r   r   r   toqimage   s    rG   c             C   s&   | j dkr| jd} t| }tj|S )Nr4   r6   )r.   ZconvertrG   r   Z	fromImage)r   Zqimager   r   r   	toqpixmap   s    

rH   )r   ) r   Z_utilr   ior   Zqt_is_installedZ
qt_versionZPyQt5.QtGuir   r   r   ZPyQt5.QtCorer	   r
   ImportErrorRuntimeErrorZPyQt4.QtGuiZPyQt4.QtCoreZPySide.QtGuiZPySide.QtCorer   r   r   r0   r@   rA   rG   rH   r   r   r   r   <module>   s:   
/