o
    e'                  
   @   s  d dl Z d dlZzd dlmZ dZe Zee W n ey8 Z zddl	m
Z
 e
e ZZW Y dZ[ndZ[ww e eZG dd dZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZi dedededed ed!ed"ed#ed$ed%ed&ed'ed(ed)ed*ed+eZejd,kreed-< eed.< eed/< eed0< eed1< need-< eed.< eed/< eed0< eed1< d5d3d4ZdS )6    N)FFIz|
    struct Pixel_RGBA {
        unsigned char r,g,b,a;
    };
    struct Pixel_I16 {
        unsigned char l,r;
    };
       )DeferredErrorc                   @   s>   e Zd ZdddZdd Zdd Zdd	 ZeZeZd
d Z	dS )PyAccessFc                 C   s   t |jj}|| _td|d | _td|d | _td|d | _|jj	\| _
| _|| _|j| _| jjdv r=|j| _|   d S )Nzunsigned char **image8zint **image32imagePPA)dictZimZunsafe_ptrsreadonlyfficastr   r   r   sizexsizeysize_img_immodepalette_palette
_post_init)selfimgr   vals r   <D:\Projects\ConvertPro\env\Lib\site-packages\PIL/PyAccess.py__init__2   s   zPyAccess.__init__c                 C   s   d S Nr   )r   r   r   r   r   E   s   zPyAccess._post_initc                 C   s   | j rtd|\}}|dk r| j| }|dk r| j| }| ||f\}}| jjdv rct|tt	frct
|dv rc| jjdkrQt
|dkrI|d nd}|d	d }| j|| j}| jjdkrc||f}| |||S )
a0  
        Modifies the pixel at x,y. The color is given as a single
        numerical value for single band images, and a tuple for
        multi-band images

        :param xy: The pixel coordinate, given as (x, y). See
           :ref:`coordinate-system`.
        :param color: The pixel value.
        z%Attempt to putpixel a read only imager   r	   )      r   r!   r       N)r   
ValueErrorr   r   check_xyr   r   
isinstancelisttuplelenr   Zgetcolorr   	set_pixel)r   xycolorxyalphar   r   r   __setitem__H   s&   


zPyAccess.__setitem__c                 C   sJ   |\}}|dk r| j | }|dk r| j| }| ||f\}}| ||S )aq  
        Returns the pixel at x,y. The pixel is returned as a single
        value for single band images or a tuple for multiple band
        images

        :param xy: The pixel coordinate, given as (x, y). See
          :ref:`coordinate-system`.
        :returns: a pixel value for single band images, a tuple of
          pixel values for multiband images.
        r   )r   r   r$   	get_pixelr   r*   r,   r-   r   r   r   __getitem__j   s   

zPyAccess.__getitem__c                 C   sR   |\}}d|  kr| j k r#n tdd|  kr"| jk s'td td|S )Nr   zpixel location out of range)r   r   r#   r1   r   r   r   r$      s   zPyAccess.check_xyNF)
__name__
__module____qualname__r   r   r/   r2   ZputpixelZgetpixelr$   r   r   r   r   r   1   s    
"r   c                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	_PyAccess32_2z7PA, LA, stored in first and last bytes of a 32 bit wordc                 O      t d| j| _d S Nzstruct Pixel_RGBA **r   r   r   pixelsr   argskwargsr   r   r   r         z_PyAccess32_2._post_initc                 C   s   | j | | }|j|jfS r   )r<   rar   r,   r-   pixelr   r   r   r0      s   z_PyAccess32_2.get_pixelc                 C   s2   | j | | }t|d d|_t|d d|_d S )Nr   r"   r   )r<   minrA   rB   r   r,   r-   r+   rD   r   r   r   r)      s   z_PyAccess32_2.set_pixelNr4   r5   r6   __doc__r   r0   r)   r   r   r   r   r8      
    r8   c                   @   r7   )	_PyAccess32_3zARGB and friends, stored in the first three bytes of a 32 bit wordc                 O   r9   r:   r;   r=   r   r   r   r      r@   z_PyAccess32_3._post_initc                 C   s   | j | | }|j|j|jfS r   )r<   rA   gbrC   r   r   r   r0         z_PyAccess32_3.get_pixelc                 C   sH   | j | | }t|d d|_t|d d|_t|d d|_d|_d S )Nr   r"   r      r<   rE   rA   rK   rL   rB   rF   r   r   r   r)      s
   
z_PyAccess32_3.set_pixelNrG   r   r   r   r   rJ      rI   rJ   c                   @   r7   )	_PyAccess32_4z&RGBA etc, all 4 bytes of a 32 bit wordc                 O   r9   r:   r;   r=   r   r   r   r      r@   z_PyAccess32_4._post_initc                 C   s"   | j | | }|j|j|j|jfS r   )r<   rA   rK   rL   rB   rC   r   r   r   r0      s   z_PyAccess32_4.get_pixelc                 C   sR   | j | | }t|d d|_t|d d|_t|d d|_t|d d|_d S )Nr   r"   r   rN   r    rO   rF   r   r   r   r)      s
   z_PyAccess32_4.set_pixelNrG   r   r   r   r   rP      rI   rP   c                   @   r7   )	
_PyAccess8z%1, L, P, 8 bit images stored as uint8c                 O      | j | _d S r   )r   r<   r=   r   r   r   r         z_PyAccess8._post_initc                 C      | j | | S r   r<   r   r,   r-   r   r   r   r0         z_PyAccess8.get_pixelc                 C   H   zt |d| j| |< W d S  ty#   t |d d| j| |< Y d S w )Nr"   r   rE   r<   	TypeErrorr   r,   r-   r+   r   r   r   r)      
   z_PyAccess8.set_pixelNrG   r   r   r   r   rQ      
    rQ   c                   @   r7   )	_PyAccessI16_Nz0I;16 access, native bitendian without conversionc                 O   r9   )Nzunsigned short **r   r   r   r<   r=   r   r   r   r      r@   z_PyAccessI16_N._post_initc                 C   rT   r   rU   rV   r   r   r   r0      rW   z_PyAccessI16_N.get_pixelc                 C   rX   )N  r   rY   r[   r   r   r   r)      r\   z_PyAccessI16_N.set_pixelNrG   r   r   r   r   r^      r]   r^   c                   @   r7   )	_PyAccessI16_LzI;16L access, with conversionc                 O   r9   Nzstruct Pixel_I16 **r_   r=   r   r   r   r      r@   z_PyAccessI16_L._post_initc                 C   s   | j | | }|j|jd  S N   r<   lrA   rC   r   r   r   r0      rM   z_PyAccessI16_L.get_pixelc                 C   sV   | j | | }zt|d}W n ty   t|d d}Y nw |d@ |_|d? |_d S )Nr`   r   r"      )r<   rE   rZ   rf   rA   rF   r   r   r   r)         
z_PyAccessI16_L.set_pixelNrG   r   r   r   r   ra      rI   ra   c                   @   r7   )	_PyAccessI16_BzI;16B access, with conversionc                 O   r9   rb   r_   r=   r   r   r   r      r@   z_PyAccessI16_B._post_initc                 C   s   | j | | }|jd |j S rc   re   rC   r   r   r   r0      rM   z_PyAccessI16_B.get_pixelc                 C   sV   | j | | }zt|d}W n ty   t|d d}Y nw |d? |_|d@ |_d S )Nr`   r   rg   r"   )r<   rE   	Exceptionrf   rA   rF   r   r   r   r)     rh   z_PyAccessI16_B.set_pixelNrG   r   r   r   r   ri      rI   ri   c                   @   r7   )	_PyAccessI32_Nz"Signed Int32 access, native endianc                 O   rR   r   r   r<   r=   r   r   r   r     rS   z_PyAccessI32_N._post_initc                 C   rT   r   rU   rV   r   r   r   r0     rW   z_PyAccessI32_N.get_pixelc                 C   s   || j | |< d S r   rU   r[   r   r   r   r)     s   z_PyAccessI32_N.set_pixelNrG   r   r   r   r   rk     r]   rk   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )_PyAccessI32_Swapz,I;32L/B access, with byteswapping conversionc                 O   rR   r   rl   r=   r   r   r   r     rS   z_PyAccessI32_Swap._post_initc                 C   s\   t d|}t d|}|d |d |d |d f\|d< |d< |d< |d< t d|d S )Nzint *zunsigned char *r    rN   r   r   )r   newr   )r   iorigcharsr   r   r   reverse  s   4z_PyAccessI32_Swap.reversec                 C   s   |  | j| | S r   rr   r<   rV   r   r   r   r0   %  r@   z_PyAccessI32_Swap.get_pixelc                 C   s   |  || j| |< d S r   rs   r[   r   r   r   r)   (  s   z_PyAccessI32_Swap.set_pixelN)r4   r5   r6   rH   r   rr   r0   r)   r   r   r   r   rm     s    rm   c                   @   r7   )	
_PyAccessFz32 bit float accessc                 O   r9   )Nzfloat **r;   r=   r   r   r   r   /  r@   z_PyAccessF._post_initc                 C   rT   r   rU   rV   r   r   r   r0   2  rW   z_PyAccessF.get_pixelc                 C   s<   z
|| j | |< W d S  ty   |d | j | |< Y d S w )Nr   )r<   rZ   r[   r   r   r   r)   5  s
   z_PyAccessF.set_pixelNrG   r   r   r   r   rt   ,  r]   rt   1Lr
   ZLAZLar   RGBZLABZHSVZYCbCrZRGBAZRGBaZRGBXZCMYKFIlittlezI;16zI;16LzI;16BzI;32LzI;32BFc                 C   s.   t | jd }|std| j d S || |S )NzPyAccess Not Implemented: %s)mode_mapgetr   loggerdebug)r   r   Zaccess_typer   r   r   rn   a  s
   
rn   r3   )loggingsysZcffir   Zdefsr   ZcdefImportErrorexZ_utilr   	getLoggerr4   r}   r   r8   rJ   rP   rQ   r^   ra   ri   rk   rm   rt   r{   	byteorderrn   r   r   r   r   <module>   s   
V	


