o
    Z#a                     @   st   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 ZG dd dejZ	e
e	je	e ee	jd dS )    N   )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 c                 C   s   | d d t jkS )N   )olefileMAGIC)prefix r   4/usr/lib/python3/dist-packages/PIL/FpxImagePlugin.py_accept*   s   r   c                   @   s8   e Zd ZdZdZdd ZdddZdd	d
Zdd ZdS )FpxImageFileFPXFlashPixc              
   C   sZ   z	t | j| _W n ty } ztd|d }~ww | jjjdkr&td| d d S )Nz!not an FPX file; invalid OLE filez$56616700-C154-11CE-8553-00AA00A1F95Bznot an FPX file; bad root CLSIDr   )	r   	OleFileIOfpoleOSErrorSyntaxErrorrootclsid_open_index)selfer   r   r   _open7   s   
zFpxImageFile._openr   c           	      C   s  | j d|ddg}|d |d f| _t| j}d}|dkr,|d }|d7 }|dks |d | _| jd	> }|d
|B  }g }t|d}|dkrKtdt|D ]}|	t|d|d  d@  qOt
t| \| _| _i | _tdD ]}d|d	> B }||v r|| | j|< qq| d| j d S )NData Object Store 06dzImage Contentsi  i  r   @         i     zInvalid number of bandsr   i   i  )r   getproperties_sizemaxsizemaxidi32r   rangeappendMODEStuplemoderawmodejpeg_open_subimage)	r   indexpropr*   iidscolorsbandsr   r   r   r   F   s6   



zFpxImageFile._open_indexr   c              
   C   s4  d|dd|ddg}| j |}|d |d}t|dt|d	f}t|d
t|df}t|d}t|d}	|| jkrDtd|d|  |t|d|	 }d }
}|\}}|\}}g | _tdt	||	D ]}t||d	 }|dkr| j
d|
||
| || ft||d | jf nh|dkr| j
d|
||
| || ft||d | j|dd
 ff nE|dkr|d }|d }| j}|r|dkrd\}}nd }n|}| j
d|
||
| || ft||d ||ff |r| j| | _ntd|
| }
|
|krd|| }
}||kr nql|| _d | _d S )Nr    r!   zResolution 04dzSubimage 0000 Header   $   r%   r   r$          zsubimage mismatch   r   rawr   fillr#         r   )YCbCrKCMYKr3   zunknown/invalid compression)r   
openstreamreadr,   r*   r   seektiler-   lenr.   r2   r3   tile_prefixstreamr   )r   r5   subimagerN   r   r9   r*   tilesizeoffsetlengthxyxsizeysizextileytiler7   compressioninternal_color_conversionjpeg_tablesr2   jpegmoder   r   r   r4   v   s   






		



zFpxImageFile._open_subimagec                 C   s0   | j s| j| jd d dg | _ tj| S )Nr#   zSubimage 0000 Data)r   r   rH   rN   r   load)r   r   r   r   r]      s   zFpxImageFile.loadN)r   )r   r   )	__name__
__module____qualname__formatformat_descriptionr   r   r4   r]   r   r   r   r   r   2   s    

0nr   z.fpx)r    r   r   _binaryr   r,   r/   r   r   register_openra   register_extensionr   r   r   r   <module>   s     ?