B
    0\              
   @   s  d dl mZ d dlmZmZ ddlmZ ddlZddgdd	gd
dgddggZej	dd dd xeD ]\Z
ZyedkrddlmZmZmZ ddlmZmZ ne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 n.edkr&ddlmZmZmZ ddlmZmZ W n eefk
rD   wdY nX dZP qdW 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 )'   )Image)isPathpy3    )BytesION5ZPyQt5Zside2ZPySide24ZPyQt4ZsideZPySidec             C   s   | d t jkS )Nr   )sysmodules)
qt_version r   *lib/python3.7/site-packages/PIL/ImageQt.py<lambda>   s    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   rgb8   s    r   c             C   s   t  }|tj |  r(| |d n| |d t }y||  W n& t	k
rr   |t
|  Y nX |  |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pngZppmr   )r   openr   Z	ReadWriteZhasAlphaChannelZsaver   writedata	TypeErrorstrcloseseekr   )imbufferr   r   r   r   
fromqimage?   s    
r%   c             C   s   t | S )N)r%   )r#   r   r   r   fromqpixmapY   s    r&   c             C   s   dddd| }|| }t |d\}}||r0dnd }| d }|sH| 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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   
align8to32g   s    
r7   c          
   C   s  d }d }t | dr4tr&t|  d} nt|  d} t| rFt| } | jdkrZt	j
}n| jdkrt	j}g }x"tdD ]}|t||| qxW n| jdkrt	j}g }|  }xtdt|dD ]}|t|||d    qW n| jd	kr| d
d}t	j}nn| jdkrfy| d
d}W n: tk
r\   |  \}}}}	td||||	f} Y nX t	j}ntd| j |pt|  | 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    r8   Zunicoder   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_helper   sD    





 rG   c               @   s   e Zd Zdd ZdS )ImageQtc             C   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)rG   Z_ImageQt__datar   __init__rF   ZsetColorTable)selfr#   Zim_datar   r   r   rI      s    
zImageQt.__init__N)__name__
__module____qualname__rI   r   r   r   r   rH      s   rH   c             C   s   t | S )N)rH   )r#   r   r   r   toqimage   s    rN   c             C   s&   | j dkr| d} t| }t|S )Nr;   r=   )r5   ZconvertrN   r   Z	fromImage)r#   Zqimager   r   r   	toqpixmap   s    

rO   )r   )$ r   Z_utilr   r   ior   r	   Zqt_versionssortr   Z	qt_moduleZPyQt5.QtGuir   r   r   ZPyQt5.QtCorer   r   ZPySide2.QtGuiZPySide2.QtCoreZPyQt4.QtGuiZPyQt4.QtCoreZPySide.QtGuiZPySide.QtCoreImportErrorRuntimeErrorZqt_is_installedr   r%   r&   r7   rG   rH   rN   rO   r   r   r   r   <module>   sL   



/