a
    h                  
   @  s6  U d dl mZ d dlZd dlmZ d dlmZmZmZ ddl	m
Z
 ddlmZ dZerd dlZd dlZdd	l	mZ d
ed< eejjejjf Zeejjejjf Zeejjejjf Zeejjejjf Zded< ddgddggZejdd dd eD ]\ZZzjded< edkr:d dlmZmZ d dlmZmZmZ n.edkrhd dl mZmZ d dl!mZmZmZ W n e"e#fy   Y qY n0 dZ$eZ% qqdZ$dZ%d6ddddddddZ&dd d!d"d#Z'd$d d!d%d&Z(d'dd(d'd)d*d+Z)d,d-d!d.d/Z*e$rG d0d1 d1eZ+d,d1d!d2d3Z,d,d$d!d4d5Z-dS )7    )annotationsN)BytesIO)AnyCallableUnion   )Image)is_pathF)	ImageFiletypeQBufferz
str | None
qt_version6PyQt6Zside6PySide6c                 C  s   | d t jv S )Nr   )sysmodules)version r   9/var/www/auris/lib/python3.9/site-packages/PIL/ImageQt.py<lambda>/       r   T)keyreversez#Callable[[int, int, int, int], int]qRgba)r   	QIODevice)QImageQPixmapr      int)r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   rgbC   s    r%   zQImage | QPixmapzImageFile.ImageFileimr$   c                 C  s   t  }tdkr<zttd}W q@ ty8   ttd}Y q@0 nt}|t|d |  rf| |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   
fromqimageJ   s     
r2   r   c                 C  s   t | S N)r2   r'   r   r   r   fromqpixmapg   s    r5   bytesstr)r6   widthmoder$   c                   sv   ddddd| }|| }t |d\}}||r2dnd  d sJ 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>r   )divmodrangelenjoin)r6   r8   r9   Zbits_per_pixelZbits_per_lineZfull_bytes_per_lineZremaining_bits_per_lineZnew_datar   rE   r   
align8to32k   s    
rK   Image.Image | str | QByteArrayzdict[str, Any]c           	        s  d }d }d}t | dr$t|  d} t| r:t| } d}t| tjsJJ tdkr\tt	dnt	}| j
dkrxt|d}n| j
d	krt|d
}dd tdD }n| j
dkrt|d
}|    d usJ  fddtdt dD }n| j
dkr| d} | dd}t|d}np| j
dkr:| dd}t|d}nL| j
dkr`| dd } t|d}n&|rn|   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      r   z$_toqclass_helper.<locals>.<listcomp>   r>   c                   s    g | ]}t  ||d    qS )   rN   rB   Zpaletter   r   rF      r   r   rP   ZRGBZRGBArawZBGRAZFormat_RGB32ZFormat_ARGB32r?   c                 S  s   | d S )NrO   r   )rD   r   r   r   r      r   z"_toqclass_helper.<locals>.<lambda>ZFormat_Grayscale16zunsupported image mode )r.   sizeformat
colortable)hasattrr7   rM   r	   r   r+   
isinstancer   r)   r   r9   rH   Z
getpaletterI   converttobytesZpointr/   repr
ValueErrorrS   rK   )	r'   r.   rU   Zexclusive_fpZ	qt_formatrT   msgrS   Z__datar   rQ   r   _toqclass_helper   sN    






 
r]   c                      s$   e Zd Zddd fddZ  ZS )ImageQtrL   Noner&   c                   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.   rS   r   r   rT   rU   N)r]   Z_ImageQt__datasuper__init__ZsetColorTable)selfr'   Zim_data	__class__r   r   ra      s    


zImageQt.__init__)__name__
__module____qualname__ra   __classcell__r   r   rc   r   r^      s   r^   c                 C  s   t | S r3   )r^   r4   r   r   r   toqimage   s    ri   c                 C  s*   t | }ttd|}tdkr&|  |S )NZ	fromImager   )ri   r)   r   r   detach)r'   ZqimageZpixmapr   r   r   	toqpixmap   s
    rk   )r   ).
__future__r   r   ior   typingr   r   r    r   Z_utilr	   TYPE_CHECKINGr   r   r
   __annotations__ZQtCoreZ
QByteArrayr   ZQtGuir   r   Zqt_versionssortr   Z	qt_moduleZPyQt6.QtCorer   ZPyQt6.QtGuir   ZPySide6.QtCoreZPySide6.QtGuiImportErrorRuntimeErrorZqt_is_installedr   r%   r2   r5   rK   r]   r^   ri   rk   r   r   r   r   <module>   sZ   


3