3

ZQ3                 @   s   d dl mZmZmZ d dlmZmZmZ	m
Z
mZmZ ddlZdZd!d"d#d$d%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ejejee ejeje ejejd ejejd  dS ),   )Image	ImageFileImagePalette)i8i16lei32leo8o16leo32le    Nz0.7PP;1P;4RGBBGR;15BGRBGRX)r                   c             C   s   | d d dkS )N   s   BM )prefixr   r   4/usr/lib/python3/dist-packages/PIL/BmpImagePlugin.py_accept1   s    r   c               @   sL   e Zd ZdZdZdZdddddd	d
Zd\ZZZ	Z
ZZdddZdd ZdS )BmpImageFilez2 Image plugin for the Windows Bitmap format (BMP) zWindows BitmapZBMPr   r   r      r      )RAWRLE8RLE4	BITFIELDSJPEGPNGc             C   s  | j j| j j }}|r|| i }t|d|d< dK|d< tj| j |d d }|d dkrt|dd |d< t|dd |d	< t|dd
 |d< t|d
d |d< | j|d< d|d< n|d dLkr|d dkrt|d dk|d< |d r dndM|d< t|dd |d< |d s6t|dd ndNt|dd  |d	< t|dd |d< t|dd |d< t|dd |d< t|dd |d< t|dd t|dd f|d< t|dd |d < d|d< t	t
d!d" |d | jd#< |d | jkrt|d$kr^xltd%d&d'd(gD ].\}}t|d)|d  d|d   ||< q*W n(d|d(< xdOD ]}t|d||< qlW |d% |d& |d' f|d*< |d% |d& |d' |d( f|d+< ntd,|d  |d |d	 f| _|jd dr|d  n
d|d > |d < |d |d	  dPkr.td.| j tj|d dQ\| _}	| jd/kr`td0|d  |d | jkrVdRdSdTdUgdVgdWdXgd8}
dZd9d\d:d^d;d`d;dbd<ddd=dfd>i}|d |
krL|d dkr|d+ |
|d  kr||d |d+ f }	|	dgkrd?n| j| _nB|d dhkrB|d* |
|d  krB||d |d* f }	ntd@ntd@nD|d | jkr|d dkr|dAkrdi\}	| _ntdB|d  | jdCkrd|d    k odDkn  stdE|d   n|d }|||d   }dF}|d  dkrdjntt|d  }xDt|D ]8\}}||| || d  }|t|d kr dG}q W |r|d  dkrtdHndI| _| j}	n"dC| _tj|dkrd9nd<|| _|d | jd< dJdd|d |d	 f|p| j j |	|d |d  d- d? dk@ |d ffg| _d/S )lz" Read relevant info about the BMP r   Zheader_sizer   	direction   r   r   widthZheight   Zplanesr   bitsZcompressionr   Zpalette_padding(   @   l   |         Zy_flipr   
   r      Z	data_sizer      Zpixels_per_metercolorsc             S   s   t tj| d S )Ngo_C@)intmathZceil)xr   r   r   <lambda>d   s    z&BmpImageFile._bitmap.<locals>.<lambda>dpi4   r_maskg_maskb_maskZa_mask$   Zrgb_maskZ	rgba_maskz Unsupported BMP header type (%d)   zUnsupported BMP Size: (%dx%d)Nz Unsupported BMP pixel depth (%d)            ~       |    )r   r   r   r   ZXBGRBGRAr   zBGR;16zBGR;15RGBAz Unsupported BMP bitfields layout   z Unsupported BMP compression (%d)r   i   z!Unsupported BMP Palette size (%d)TF1Lraw)r+   r,   r-   r.   rM   l        )r;   r<   r=   l        )NN)r@   rA   r0   r   )r@   rA   r0   rB   )r   r   r   r   )rB   r@   rA   r   )r@   rA   r0   )rC   rD   r?   )rE   rF   r?   r@   rA   r0   r   )r   rN   rB   r@   rA   r   )r   rO   r@   rA   r0   rB   )r   rP   r   r   r   r   )r   rQ   r@   rA   r0   )r   rR   rC   rD   r?   )r   rS   rE   rF   r?   )r   rT   )rG   )r   r   )rG   rH   )r   r0   )fpreadseeki32r   Z
_safe_readi16r    r   tuplemapinfor#   len	enumerateIOErrorsizegetBIT2MODEmodelistranger   r   rL   palettetellZtile)selfheaderoffsetrW   rX   	file_infoZheader_dataidxmaskZraw_modeZ	SUPPORTEDZ
MASK_MODESZpaddingrg   Z	greyscaleindicesZindvalZrgbr   r   r   _bitmapB   s    
2$,
"&
$$

 "
"zBmpImageFile._bitmapc             C   sD   | j jd}|dd dkr$tdt|dd }| j|d dS )	z/ Open file, check magic number and read header    r   r   s   BMzNot a BMP filer1   )rk   N)rV   rW   SyntaxErrorrY   rq   )ri   Z	head_datark   r   r   r   _open   s
    zBmpImageFile._openN)r   r   r   r   r   r   )r   r   )__name__
__module____qualname____doc__format_descriptionformatZCOMPRESSIONSr    r!   r"   r#   r$   r%   rq   rt   r   r   r   r   r   8   s   
}r   c               @   s   e Zd ZdZdZdd ZdS )DibImageFileZDIBzWindows Bitmapc             C   s   | j   d S )N)rq   )ri   r   r   r   rt      s    zDibImageFile._openN)ru   rv   rw   rz   ry   rt   r   r   r   r   r{      s   r{   rJ   r   rK   r      r   rG   r   )rJ   rK   r   r   rH   c             C   s  yt | j \}}}W n" tk
r6   td| j Y nX | j}|jdd}ttdd |}| jd | d d d	 d@ }	d
}
d|
 |d  }|	| jd  }|j	dt
||  t
d t
|  |j	t
|
t
| jd  t
| jd  td t| t
d t
| t
|d  t
|d  t
| t
|  |j	d|
d
   | jdkrvxvdD ]}|j	t|d  qXW nT| jdkrxFtdD ]}|j	t|d  qW n | jdkr|j	| jjdd tj| |dd| j d||	dffg d S )Nzcannot write mode %s as BMPr9   `   c             S   s   t | d S )Ngo_C@)r5   )r7   r   r   r   r8      s    z_save.<locals>.<lambda>r   r/   r   r   r+   rr   r   r   s   BM    rJ   r0   rK   r|   r   r   r   rL   )r}   r}   rU   )r   r0   )r   r   rM   )SAVErd   KeyErrorr`   Zencoderinforb   r[   r\   ra   writeo32o16r   rf   imZ
getpaletter   _save)r   rV   filenameZrawmoder*   r4   r]   r9   ZppmZstriderj   rk   Zimageir   r   r   r      s8    b
r   z.bmpz	image/bmp)r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )rJ   r   r   )rK   r   r|   )r   r   r|   )r   r   r   )rG   r   r   ) r   r   r   Z_binaryr   r   rZ   r   rY   r   r	   r   r
   r   r6   __version__rc   r   r   r{   r   r   Zregister_openrz   Zregister_saveZregister_extensionZregister_mimer   r   r   r   <module>   s.     7