U
    Å½„b|?  ã                   @   sT  d dl Z ddlmZmZmZ ddlmZ ddlmZ	 ddlm
Z
 ddlmZ ddlmZ d	d
dddddœZdd„ Zdd„ ZG dd„ dejƒZG dd„ dejƒZG dd„ deƒZddddddœZd d!„ Zd)d#d$„Ze ejee¡ e eje¡ e ejd%¡ e ejd&¡ e d'e¡ e ejee¡ e eje¡ e ejd(¡ e ejd&¡ dS )*é    Né   )ÚImageÚ	ImageFileÚImagePalette)Úi16le)Úi32le)Úo8)Úo16le)Úo32le)ÚPzP;1)r   zP;4)r   r   )ÚRGBúBGR;15)r   ÚBGR)r   ÚBGRX)r   é   é   é   é   é    c                 C   s   | d d… dkS )Né   ó   BM© ©Úprefixr   r   ú6/tmp/pip-unpacked-wheel-_wxctax1/PIL/BmpImagePlugin.pyÚ_accept3   s    r   c                 C   s   t | ƒdkS )N)é   é(   é@   él   é|   )Úi32r   r   r   r   Ú_dib_accept7   s    r"   c                   @   sX   e Zd ZdZdZdZdddddd	d
œZe ¡ D ]\ZZ	e	e
ƒ e< q.ddd„Zdd„ ZdS )ÚBmpImageFilez0Image plugin for the Windows Bitmap format (BMP)úWindows BitmapZBMPr   r   r   é   r   é   )ÚRAWÚRLE8ZRLE4Ú	BITFIELDSZJPEGZPNGc              	   C   s¬  | j j| j j }}|r||ƒ i }t|dƒƒ|d< d|d< t | j |d d ¡}|d dkrªt|dƒ|d< t|dƒ|d	< t|dƒ|d
< t|dƒ|d< | j|d< d|d< �n¬|d dk�rB|d dk|d< |d rÔdnd|d< t|dƒ|d< |d süt|dƒndt|dƒ |d	< t|dƒ|d
< t|dƒ|d< t|dƒ|d< t|dƒ|d< t|dƒt|dƒf|d< t|dƒ|d< d|d< tdd „ |d D ƒƒ| j	d!< |d | j
k�rVt|ƒd"k�râtd#d$d%d&gƒD ] \}}t|d'|d  ƒ||< �q¾n$d|d&< d(D ]}t|dƒƒ||< �qî|d# |d$ |d% f|d)< |d# |d$ |d% |d& f|d*< ntd+|d › d,�ƒ‚|d |d	 f| _| dd¡�r~|d n
d|d > |d< |d-|d  k�r¾|d dk�r¾|d|d  7 }t |d d.¡\| _}	| jd/k�rôtd0|d › d,�ƒ‚d1}
|d | j
k�ræd2d3d4d5d6gd7gd8d9gd:œ}d;d<d=d>d>d?d@dAdBœ}|d |k�rÜ|d dCk�r˜|d* ||d  k�r˜||d |d* f }	dD|	k�rŽd=n| j| _nB|d dEk�rÒ|d) ||d  k�rÒ||d |d) f }	ntdFƒ‚ntdFƒ‚n^|d | jk�r|d dCk�rD|dGk�rDdH\}	| _n*|d | jk�r0dI}
ntdJ|d › d,�ƒ‚| jdKk�rLd|d   k �rldLk�s„n tdM|d › d,�ƒ‚nÈ|d }|||d  ƒ}dN}|d dk�r²dOntt|d ƒƒ}t|ƒD ]8\}}||| || d … }|t|ƒd k�rÊdP}�qÊ|�r*|d dk�rdQndR| _| j}	n"dK| _t |dk�rBd;nd?|¡| _|d | j	d< |
dd|d |d	 f|�p|| j  ¡ |	|d |d  dS d? dT@ |d ffg| _d/S )Uz Read relevant info about the BMPr   Úheader_sizeéÿÿÿÿÚ	directionr   r   Úwidthr   ÚheightZplanesé   ÚbitsÚcompressionr%   Zpalette_padding)r   r   r   r    é   éÿ   Zy_flipr   l        r   é
   r   Ú	data_sizeé   r   Zpixels_per_meteré   Úcolorsc                 s   s   | ]}|d  V  qdS )çóÒo_¯C@Nr   )Ú.0Úxr   r   r   Ú	<genexpr>x   s     z'BmpImageFile._bitmap.<locals>.<genexpr>Údpié4   Úr_maskÚg_maskÚb_maskZa_maské$   )r?   r@   rA   Zrgb_maskZ	rgba_maskzUnsupported BMP header type (ú)é   )NNNzUnsupported BMP pixel depth (Úraw©é  ÿ é ÿ  r3   r   ©rG   rH   r3   ì      ~ ©r3   rH   rG   rJ   ©r   r   r   r   ©rJ   rG   rH   r   ©rG   rH   r3   ©i ø  ià  é   ©i |  ià  rP   )r   r   r   r   ZXBGRÚRGBAÚBGRAr   zBGR;16r   ))r   rF   )r   rM   )r   rK   )r   rI   )r   rL   )r   rN   )r   rO   )r   rQ   r   ÚA)r   r   z Unsupported BMP bitfields layouté   )rS   rR   Úbmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (T©r   r3   FÚ1ÚLrP   éüÿÿÿ)ÚfpÚreadÚseekr!   r   Ú
_safe_readÚi16r'   ÚtupleÚinfor)   ÚlenÚ	enumerateÚOSErrorÚ_sizeÚgetÚBIT2MODEÚmoder(   ÚlistÚranger   r   rE   ÚpaletteÚtellZtile)ÚselfÚheaderÚoffsetr\   r]   Ú	file_infoZheader_dataÚidxÚmaskZraw_modeZdecoder_nameZ	SUPPORTEDZ
MASK_MODESÚpaddingrk   Z	greyscaleÚindicesÚindÚvalZrgbr   r   r   Ú_bitmapJ   s
   
ÿýþ
ÿ
ýü

ÿ
ý û÷ø

ÿþ
ÿþ


ÿý ÿýüÿzBmpImageFile._bitmapc                 C   s6   | j  d¡}t|ƒstdƒ‚t|dƒ}| j|d� dS )z-Open file, check magic number and read headerrD   zNot a BMP filer4   )ro   N)r[   r\   r   ÚSyntaxErrorr!   rw   )rm   Z	head_dataro   r   r   r   Ú_open
  s
    
zBmpImageFile._openN)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úformat_descriptionÚformatZCOMPRESSIONSÚitemsÚkÚvÚvarsrw   ry   r   r   r   r   r#   >   s   
 Ar#   c                   @   s   e Zd ZdZdd„ ZdS )ÚBmpRleDecoderTc           
      C   s°  t ƒ }d}t|ƒ| jj| jj k �r�| j d¡}| j d¡}|rD|sH�q�|d }|rŒ|| | jjkrvtd| jj| ƒ}||| 7 }||7 }q
|d dkr¼t|ƒ| jj dkr¶|d7 }q˜d}q
|d dkrÎ�q�q
|d dk�r2| j d¡}t|ƒdk rø�q�| j d¡\}}	|d||	| jj   7 }t|ƒ| jj }q
| j |d ¡}||7 }t|ƒ|d k �r`�q�||d 7 }| j ¡ d dkr
| j 	dt
j¡ q
|  t|ƒdd| jd f¡ dS )Nr   r   ó    r   r   r+   )r+   r   )Ú	bytearrayrb   ÚstateZxsizeZysizeÚfdr\   Úmaxrl   r]   ÚosÚSEEK_CURZ
set_as_rawÚbytesÚargs)
rm   ÚbufferÚdatar;   ZpixelsÚbyteZ
num_pixelsÚ
bytes_readÚrightZupr   r   r   Údecode  sF    

zBmpRleDecoder.decodeN)rz   r{   r|   Z	_pulls_fdr“   r   r   r   r   r„     s   r„   c                   @   s   e Zd ZdZdZdd„ ZdS )ÚDibImageFileZDIBr$   c                 C   s   |   ¡  d S )N)rw   )rm   r   r   r   ry   R  s    zDibImageFile._openN)rz   r{   r|   r   r~   ry   r   r   r   r   r”   M  s   r”   )rX   r   r   )rY   r   é   )r   r   r•   )r   r   r   )rS   r   r   )rX   rY   r   r   rR   c                 C   s   t | ||dƒ d S )NF)Ú_save)Úimr[   Úfilenamer   r   r   Ú	_dib_saved  s    r™   Tc              
   C   s  zt | j \}}}W n6 tk
rJ } ztd| j› d�ƒ|‚W 5 d }~X Y nX | j}| dd¡}	ttdd„ |	ƒƒ}
| jd | d d	 d
 d@ }d}|| jd  }|rîd| |d  }|| }|dkrÌt	dƒ‚| 
dt|ƒ tdƒ t|ƒ ¡ | 
t|ƒt| jd ƒ t| jd ƒ tdƒ t|ƒ tdƒ t|ƒ t|
d ƒ t|
d ƒ t|ƒ t|ƒ ¡ | 
d|d  ¡ | jdk�rždD ]}| 
t|ƒd ¡ �q‚nP| jdk�rÎtdƒD ]}| 
t|ƒd ¡ �q²n | jdk�rî| 
| j dd¡¡ t | |dd| j d||dffg¡ d S )Nzcannot write mode z as BMPr=   )é`   rš   c                 S   s   t | d d ƒS )Nr9   g      à?)Úint)r;   r   r   r   Ú<lambda>s  ó    z_save.<locals>.<lambda>r   r2   r   r%   rZ   r   r   rD   r   l   ÿÿ z)File size is too large for the BMP formatr   r…   rX   rW   rY   r•   r   r   r   rE   )r   r   r+   )ÚSAVErh   ÚKeyErrorrd   Zencoderinforf   r`   ÚmapÚsizeÚ
ValueErrorÚwriteÚo32Úo16r   rj   r—   Z
getpaletter   r–   )r—   r[   r˜   Zbitmap_headerÚrawmoder0   r8   Úera   r=   ÚppmZstridern   Úimagero   Ú	file_sizeÚir   r   r   r–   h  sr    &ÿþýÿÿþýüûú
ù
ø	÷
öÿr–   z.bmpz	image/bmprV   z.dib)T)rŠ   Ú r   r   r   Ú_binaryr   r_   r   r!   r   r	   r¥   r
   r¤   rg   r   r"   r#   Z	PyDecoderr„   r”   rž   r™   r–   Zregister_openr   Zregister_saveZregister_extensionZregister_mimeZregister_decoderr   r   r   r   Ú<module>   sH   ù Z6û	
@