o
     h                  
   @  s  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red 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 ]H\ZZz3ded< edkrd dlmZmZ d dlmZmZmZ nedkrd dl mZmZ d dl!mZmZmZ W n e"e#fy   Y q|w dZ$eZ% qdZ$dZ%d;d<d!d"Z&d=d&d'Z'd>d)d*Z(d?d/d0Z)d@d3d4Z*e$rG d5d6 d6eZ+dAd7d8Z,dBd9d:Z-dS )C    )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   Q/home/www/facesmatcher.com/frenv_anti/lib/python3.10/site-packages/PIL/ImageQt.py<lambda>/   s    r   T)keyreversez#Callable[[int, int, int, int], int]qRgba)r   	QIODevice)QImageQPixmapr      rint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$   imQImage | QPixmapImageFile.ImageFilec                 C  s   t  }tdkrzttd}W q ty   ttd}Y qw t}|t|d |  r2| |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     t | S N)r2   r%   r   r   r   fromqpixmapg      r6   byteswidthmodestrc                   sv   ddddd| }|| }t |d\}}||rdnd  d s% 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r8   Zbytes_per_lineZextra_paddingr   r   
<listcomp>}   s    zalign8to32.<locals>.<listcomp>    )divmodrangelenjoin)r8   r9   r:   Zbits_per_pixelZbits_per_lineZfull_bytes_per_lineZremaining_bits_per_lineZnew_datar   rG   r   
align8to32k   s   

rN   Image.Image | str | QByteArraydict[str, Any]c           	        s  d }d }d}t | drt|  d} t| rt| } d}t| tjs%J tdkr.tt	dnt	}| j
dkr;t|d}n| j
d	krOt|d
}dd tdD }no| j
dkrst|d
}|    d uscJ  fddtdt dD }nK| j
dkr| d} | dd}t|d}n5| j
dkr| dd}t|d}n$| j
dkr| dd } t|d}n|r|   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$   rD   r   r   r   rH      s    z$_toqclass_helper.<locals>.<listcomp>   r@   c                   s    g | ]}t  ||d    qS )   rR   rD   paletter   r   rH      s     r   rT   RGBZRGBArawZBGRAZFormat_RGB32ZFormat_ARGB32rA   c                 S  s   | d S )NrS   r   )rF   r   r   r   r      s    z"_toqclass_helper.<locals>.<lambda>ZFormat_Grayscale16zunsupported image mode )r.   sizeformat
colortable)hasattrr;   rQ   r	   r   r+   
isinstancer   r)   r   r:   rK   Z
getpaletterL   converttobytespointr/   repr
ValueErrorrY   rN   )	r%   r.   r[   Zexclusive_fpZ	qt_formatrZ   msgrY   Z__datar   rU   r   _toqclass_helper   sN   






 



rd   c                      s   e Zd Zd fddZ  ZS )ImageQtr%   rO   r#   Nonec                   sX   t |}|d | _t | j|d d |d d |d  |d r*| |d  dS 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.   rY   r   r   rZ   r[   N)rd   Z_ImageQt__datasuper__init__ZsetColorTable)selfr%   Zim_data	__class__r   r   rh      s   


zImageQt.__init__)r%   rO   r#   rf   )__name__
__module____qualname__rh   __classcell__r   r   rj   r   re      s    re   c                 C  r3   r4   )re   r5   r   r   r   toqimage   r7   rp   c                 C  s*   t | }ttd|}tdkr|  |S )NZ	fromImager   )rp   r)   r   r   detach)r%   ZqimageZpixmapr   r   r   	toqpixmap   s
   rr   )r   )
r   r   r    r   r!   r   r"   r   r#   r   )r%   r&   r#   r'   )r%   r   r#   r'   )r8   r8   r9   r   r:   r;   r#   r8   )r%   rO   r#   rP   )r%   rO   r#   re   )r%   rO   r#   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   r6   rN   rd   re   rp   rr   r   r   r   r   <module>   s`   



3
