o
     Pj&                     @  s   d dl mZ d dlZddlmZmZ ddlmZ dddd	d
dddZ	dddZ
G dd dejZeejee
 eejd dS )    )annotationsN   )Image	ImageFile)i32le)AL)r   r   )RGBALA)RGBzYCC;P)r	   zYCCA;P)r   r   )r	   r	   ))i  )i   )i  i )i   i  i  )i  i i i )i   i  i  )i  i i i prefixbytesreturnboolc                 C  s   |  tjS N)
startswitholefileMAGIC)r    r   G/home/thesage/.local/lib/python3.10/site-packages/PIL/FpxImagePlugin.py_accept,   s   r   c                      s`   e Zd ZdZdZdddZddd
dZddddZdddZd fddZ	d fddZ
  ZS ) FpxImageFileFPXFlashPixr   Nonec              
   C  sx   | j d usJ z	t| j | _W n ty# } zd}t||d }~ww | jj}|r/|jdkr5d}t|| d d S )Nz!not an FPX file; invalid OLE filez$56616700-C154-11CE-8553-00AA00A1F95Bznot an FPX file; bad root CLSIDr   )	fpr   	OleFileIOoleOSErrorSyntaxErrorrootclsid_open_index)selfemsgr    r   r   r   _open8   s   
zFpxImageFile._openr   indexintc           	        s6  | j d|ddg}t|d tsJ t|d tsJ |d |d f| _t| j}d}|dkr>|d }|d7 }|dks2|d | _| jd	> }|d
|B   t tr\t	 d }dkrbd}t
|t fddt|D }t| \| _| _i | _tdD ]}d|d	> B }||v r|| | j|< q~| d| j d S )NData Object Store 06dzImage Contentsi  i  r   @         i     zInvalid number of bandsc                 3  s&    | ]}t  d |d  d@ V  qdS )   r.   iN)i32).0isr   r   	<genexpr>o   s   $ z+FpxImageFile._open_index.<locals>.<genexpr>   i  )r   getproperties
isinstancer(   _sizemaxsizemaxidr   r0   r   tuplerangeMODES_moderawmodejpeg_open_subimage)	r#   r'   propr;   r2   idbandsr%   colorsr   r3   r   r"   K   s6   


zFpxImageFile._open_indexr   subimagec                 C  s~  d|dd|ddg}| j |}|d |d}t|dt|d	f}t|d
t|d}}|dks:|dkr@d}	t|	t|d}
t|d}|| jkrUd}	t|	|d|
  |t|d| }d }}|\}}g | _t	dt
||D ]}t||| }t||| }t||d	 }|dkr| jtd||||ft||d | j nh|dkr| jtd||||ft||d | j|dd
 f nG|dkr|d }|d }| j}|r|dkrd\}}nd }n|}| jtd||||ft||d ||f |r| j| | _nd}	t|	||7 }||kr*d|| }}||kr* nqy| jd us3J || _| j| _d | _d S )Nr)   r*   zResolution 04dzSubimage 0000 Header   $   r.   r/   r-      r+   z#Tile must be 64 pixels by 64 pixels    zsubimage mismatch   r   rawr   fillr,         r	   )YCbCrKCMYKrB   zunknown/invalid compression)r   
openstreamreadr0   
ValueErrorr;   r   seektiler>   lenminappendr   _TilerA   rB   tile_prefixr   stream_fp)r#   r'   rH   r_   r   r4   r;   xtileytiler%   offsetlengthxyxsizeysizer2   x1y1compressioninternal_color_conversionjpeg_tablesrA   jpegmoder   r   r   rC   |   s   







	

	




zFpxImageFile._open_subimageImage.core.PixelAccess | Nonec                 C  s0   | j s| j| jd d dg | _ tj| S )Nr,   zSubimage 0000 Data)r   r   rU   r_   r   loadr#   r   r   r   rp      s   zFpxImageFile.loadc                   s   | j   t   d S r   )r   closesuperrq   	__class__r   r   rr         
zFpxImageFile.closeargsobjectc                   s   | j   t   d S r   )r   rr   rs   __exit__)r#   rw   rt   r   r   ry      rv   zFpxImageFile.__exit__)r   r   )r   )r'   r(   r   r   )r   r   )r'   r(   rH   r(   r   r   )r   ro   )rw   rx   r   r   )__name__
__module____qualname__formatformat_descriptionr&   r"   rC   rp   rr   ry   __classcell__r   r   rt   r   r   4   s    
1
ur   z.fpx)r   r   r   r   )
__future__r   r    r   r   _binaryr   r0   r?   r   r   register_openr}   register_extensionr   r   r   r   <module>   s"   
 Q