U
    #5øi¢7  ã                   @   s.  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ƒ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 ejee¡ e eje¡ e ejd#¡ e ejd"¡ d$S )&é   )Ú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-eypja6ja/PIL/BmpImagePlugin.pyÚ_accept1   s    r   c                 C   s   t | ƒdkS )N)é   é(   é@   él   é|   )Úi32r   r   r   r   Ú_dib_accept5   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BMPé    r   r   é   r   é   )ÚRAWZ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,�ƒ‚|d | j
k�râd1d2d3d4d5gd6gd7d8gd9œ}
d:d;d<d=d=d>d?d@dAœ}|d |
k�rØ|d dBk�r”|d* |
|d  k�r”||d |d* f }	dC|	k�rŠd<n| j| _nB|d dDk�rÎ|d) |
|d  k�rÎ||d |d) f }	ntdEƒ‚ntdEƒ‚nH|d | jk�r|d dBk�r*|dFk�r*dG\}	| _ntdH|d › d,�ƒ‚| jdIk�r2d|d   k �rRdJk�sjn tdK|d › d,�ƒ‚nÈ|d }|||d  ƒ}dL}|d dk�r˜dMntt|d ƒƒ}t|ƒD ]8\}}||| || d … }|t|ƒd k�r°dN}�q°|�r|d dk�rdOndP| _| j}	n"dI| _t |dk�r(d:nd>|¡| _|d | j	d< dQdd|d |d	 f|�pb| j  ¡ |	|d |d  dR d? dS@ |d ffg| _d/S )Tz 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>v   s     z'BmpImageFile._bitmap.<locals>.<genexpr>Údpié4   Úr_maskÚg_maskÚb_maskZa_maské$   )r>   r?   r@   Zrgb_maskZ	rgba_maskzUnsupported BMP header type (ú)é   )NNNzUnsupported BMP pixel depth (©é  ÿ é ÿ  r2   r$   ©rE   rF   r2   ì      ~ ©r2   rF   rE   rH   ©r$   r$   r$   r$   ©rH   rE   rF   r$   ©rE   rF   r2   ©i ø  ià  é   ©i |  ià  rN   )r   r   r   r   ZXBGRÚRGBAÚBGRAr   zBGR;16r   ))r   rD   )r   rK   )r   rI   )r   rG   )r   rJ   )r   rL   )r   rM   )r   rO   r   ÚA)r   r   z Unsupported BMP bitfields layouté   )rQ   rP   zUnsupported BMP compression (r
   i   zUnsupported BMP Palette size (T©r$   r2   FÚ1ÚLÚrawrN   éüÿÿÿ)ÚfpÚreadÚseekr    r   Ú
_safe_readÚi16r'   ÚtupleÚinfor(   ÚlenÚ	enumerateÚOSErrorÚ_sizeÚgetÚBIT2MODEÚmodeÚlistÚranger   r   rW   ÚpaletteÚtellZtile)ÚselfÚheaderÚoffsetrZ   r[   Ú	file_infoZheader_dataÚidxÚmaskZraw_modeZ	SUPPORTEDZ
MASK_MODESÚpaddingri   Z	greyscaleÚindicesÚindÚvalZrgbr   r   r   Ú_bitmapH   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 headerrC   zNot a BMP filer3   )rm   N)rY   rZ   r   ÚSyntaxErrorr    ru   )rk   Z	head_datarm   r   r   r   Ú_open  s
    
zBmpImageFile._openN)r$   r$   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úformat_descriptionÚformatZCOMPRESSIONSÚitemsÚkÚvÚvarsru   rw   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)ru   )rk   r   r   r   rw     s    zDibImageFile._openN)rx   ry   rz   r}   r|   rw   r   r   r   r   r‚     s   r‚   )rU   r   r   )rV   r   é   )r
   r   rƒ   )r   r   r$   )rQ   r   r$   )rU   rV   r
   r   rP   c                 C   s   t | ||dƒ d S )NF)Ú_save)ÚimrY   Úfilenamer   r   r   Ú	_dib_save,  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 )Nr8   g      à?)Úint)r:   r   r   r   Ú<lambda>;  ó    z_save.<locals>.<lambda>r$   r1   r   r%   rX   r   r   rC   r   l   ÿÿ z)File size is too large for the BMP formatr   ó    rU   rT   rV   rƒ   r
   r   r   rW   )r$   r$   r*   )ÚSAVErf   ÚKeyErrorrb   Zencoderinford   r^   ÚmapÚsizeÚ
ValueErrorÚwriteÚo32Úo16r   rh   r…   Z
getpaletter   r„   )r…   rY   r†   Zbitmap_headerÚrawmoder/   r7   Úer_   r<   ÚppmZstriderl   Úimagerm   Ú	file_sizeÚir   r   r   r„   0  sr    &ÿþýÿÿþýüûú
ù
ø	÷
öÿr„   z.bmpz	image/bmpz.dibN)T)Ú r   r   r   Ú_binaryr   r]   r   r    r   r   r”   r	   r“   re   r   r!   r"   r‚   r�   r‡   r„   Zregister_openr}   Zregister_saveZregister_extensionZregister_mimer   r   r   r   Ú<module>   sB   ù Zû	
@