o
    Z#ûa¢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   ú4/usr/lib/python3/dist-packages/PIL/BmpImagePlugin.pyÚ_accept1   s   r   c                 C   s   t | ƒdv S )N)é   é(   é@   él   é|   )Úi32r   r   r   r   Ú_dib_accept5   ó   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 BitmapÚBMPé    r   r   é   r   é   )ÚRAWÚRLE8ÚRLE4Ú	BITFIELDSÚJPEGÚPNGc              	   C   sz  | j j| j j}}|r||ƒ i }t|dƒƒ|d< d|d< t | j |d d ¡}|d dkrTt|dƒ|d< t|dƒ|d	< t|dƒ|d
< t|dƒ|d< | j|d< d|d< nÑ|d dv �r|d dk|d< |d rid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�rt|ƒd"krìtg d#¢ƒ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¡�r9|d nd|d > |d< |d.|d  k�rY|d dk�rY|d|d  7 }t |d d/¡\| _}	| jd0u �rttd1|d › d-�ƒ‚|d | j
k�ræg d2¢d3gd4d5gd6œ}
d7d8d9d:d:d;d<d=d>œ}|d |
v �râ|d d?k�rÁ|d+ |
|d  v �rÁ||d |d+ f }	d@|	v �r¼d9n| j| _nI|d dAv �rÞ|d* |
|d  v �rÞ||d |d* f }	n,tdBƒ‚tdBƒ‚|d | jk�r |d d?k�rÿ|dCk�rÿdD\}	| _n
tdE|d › d-�ƒ‚| jdFk�r�d|d   k �rdGk�s)n tdH|d › d-�ƒ‚|d }|||d  ƒ}dI}|d dk�r@dJntt|d ƒƒ}t|ƒD ]\}}||| || d … }|t|ƒd k�rgdK}�qL|�r||d dk�rudLndM| _| j}	ndF| _t |dk�rˆd7nd;|¡| _|d | j	d< dNdd|d |d	 f|�p¥| j  ¡ |	|d |d  dO d? dP@ |d ffg| _d0S )Qz Read relevant info about the BMPr   Úheader_sizeéÿÿÿÿÚ	directionr   r&   Úwidthr   ÚheightÚplanesé   ÚbitsÚcompressionr'   Úpalette_padding)r   r   r   r   é   éÿ   Úy_flipr   l        r   é
   r   Ú	data_sizeé   r   Ú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_maskÚa_maské$   rK   )rH   rI   rJ   rH   rI   rJ   Úrgb_maskÚ	rgba_maskzUnsupported BMP header type (ú)é   )NNNzUnsupported BMP pixel depth ()©é  ÿ é ÿ  r:   r&   ©rR   rS   r:   ì      ~ ©r:   rS   rR   rU   ©r&   r&   r&   r&   ©rU   rR   rS   r&   ©rR   rS   r:   ©i ø  ià  é   ©i |  ià  r[   )r   r   r   r   ÚXBGRÚRGBAÚBGRAr   zBGR;16r   ))r   rQ   )r   rX   )r   rV   )r   rT   )r   rW   )r   rY   )r   rZ   )r   r\   r   ÚA)r   r   z Unsupported BMP bitfields layouté   )r_   r^   zUnsupported BMP compression (r
   i   zUnsupported BMP Palette size (T©r&   r:   FÚ1ÚLÚrawr[   éüÿÿÿ)ÚfpÚreadÚseekr    r   Ú
_safe_readÚi16r)   ÚtupleÚinfor,   ÚlenÚ	enumerateÚOSErrorÚ_sizeÚgetÚBIT2MODEÚmodeÚlistÚranger   r   re   ÚpaletteÚtellÚtile)ÚselfÚheaderÚoffsetrh   ri   Ú	file_infoÚheader_dataÚidxÚmaskÚraw_modeÚ	SUPPORTEDÚ
MASK_MODESÚpaddingrw   Ú	greyscaleÚindicesÚindÚvalÚ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 headerrP   zNot a BMP filer<   )r|   N)rg   rh   r   ÚSyntaxErrorr    rŠ   )rz   Ú	head_datar|   r   r   r   Ú_open  s
   
zBmpImageFile._openN©r&   r&   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úformat_descriptionÚformatÚCOMPRESSIONSÚitemsÚkÚvÚvarsrŠ   r�   r   r   r   r   r#   <   s    
 >r#   c                   @   s   e Zd ZdZdZdd„ ZdS )ÚDibImageFileÚDIBr$   c                 C   s   |   ¡  d S )N)rŠ   )rz   r   r   r   r�     r"   zDibImageFile._openN)r�   r�   r‘   r”   r“   r�   r   r   r   r   rš     s    rš   )rc   r   r   )rd   r   é   )r
   r   rœ   )r   r   r&   )r_   r   r&   )rc   rd   r
   r   r^   c                 C   s   t | ||dƒ d S )NF)Ú_save)Úimrg   Úfilenamer   r   r   Ú	_dib_save,  s   r    Tc              
   C   s  z
t | j \}}}W n ty  } z
td| j› d�ƒ|‚d }~ww | j}| dd¡}	ttdd„ |	ƒƒ}
| jd | d d	 d
 d@ }d}|| jd  }|rrd| |d  }|| }|dkrat	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»n%| 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 BMPrF   )é`   r¡   c                 S   s   t | d d ƒS )NrB   g      à?)Úint)rD   r   r   r   Ú<lambda>;  s    z_save.<locals>.<lambda>r&   r9   r   r'   rf   r   r   rP   r   l   ÿÿ z)File size is too large for the BMP formatr   ó    rc   rb   rd   rœ   r
   r   r   re   rŽ   r0   )ÚSAVErt   ÚKeyErrorrp   Úencoderinforr   rl   ÚmapÚsizeÚ
ValueErrorÚwriteÚo32Úo16r   rv   rž   Ú
getpaletter   r�   )rž   rg   rŸ   Úbitmap_headerÚrawmoder6   rA   Úerm   rF   ÚppmÚstrider{   Úimager|   Ú	file_sizeÚir   r   r   r�   0  sz   €ÿÿþýÿÿþýüûú
ù
ø	÷
öÿ
ÿ
ÿ
(r�   z.bmpz	image/bmpz.dibN)T)Ú r   r   r   Ú_binaryr   rk   r   r    r   r   r­   r	   r¬   rs   r   r!   r#   rš   r¥   r    r�   Úregister_openr”   Úregister_saveÚregister_extensionÚregister_mimer   r   r   r   Ú<module>   sD   ù Zû	
@