a
    &g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   [/mounts/lovelace/software/anaconda3/envs/metaDMG/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   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 )   rO   rB   paletter   r   rF      r   r   rQ   RGBZRGBArawZBGRAZFormat_RGB32ZFormat_ARGB32r?   c                 S  s   | d S )NrP   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tobytespointr/   repr
ValueErrorrV   rK   )	r'   r.   rX   Zexclusive_fpZ	qt_formatrW   msgrV   Z__datar   rR   r   _toqclass_helper   sN    






 
ra   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.   rV   r   r   rW   rX   N)ra   Z_ImageQt__datasuper__init__ZsetColorTable)selfr'   Zim_data	__class__r   r   re      s    


zImageQt.__init__)__name__
__module____qualname__re   __classcell__r   r   rg   r   rb      s   rb   c                 C  s   t | S r3   )rb   r4   r   r   r   toqimage   s    rm   c                 C  s*   t | }ttd|}tdkr&|  |S )NZ	fromImager   )rm   r)   r   r   detach)r'   ZqimageZpixmapr   r   r   	toqpixmap   s
    ro   )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   ra   rb   rm   ro   r   r   r   r   <module>   sZ   


3