B
    0\58                 @   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ejee eeje eejd eejd dS )   )Image	ImageFileImagePalette)i8i16lei32leo8o16leo32le    Nz0.7)PzP;1)r   zP;4)r   r   )RGBzBGR;15)r   BGR)r   BGRX)r                   c             C   s   | d d dkS )N   s   BM )prefixr   r   1lib/python3.7/site-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PNG)r   r   r   r   r   r   c             C   s  | j j| j j }}|r|| i }t|d|d< d|d< t| 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 dkr|d dkrt|d dk|d< |d r dnd|d< t|dd |d< |d s6t|dd ndt|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d*D ]}t|d||< qlW |d% |d& |d' f|d+< |d% |d& |d' |d( f|d,< ntd-|d  |d |d	 f| _|d dr|d  n
d|d > |d < |d |d	  d.kr.td/| j t|d d0\| _}	| jd1kr`td2|d  |d | jkrJd3d4d5d6gd7gd8d9gd:}
d;d<d=d=d>d?d@dA}|d |
kr@|d dkr|d, |
|d  kr||d |d, f }	|	dBkrdCn| j| _nB|d dDkr6|d+ |
|d  kr6||d |d+ f }	ntdEntdEnD|d | jkr~|d dkr|dFkrdG\}	| _ntdH|d  | jdIkrd|d    k rdJksn tdK|d   n|d }|||d   }dL}|d  dkrdMntt|d  }xDt|D ]8\}}||| || d  }|t|d krdN}qW |rt|d  dkrfdOndP| _| j}	n"dI| _t|dkrd;nd>|| _|d | jd< dQdd|d |d	 f|p| j  |	|d |d  dR d? dS@ |d ffg| _d1S )Tz" Read relevant info about the BMP r   Zheader_size	direction   r   r   widthZheight   Zplanesr   bitsZcompressionr   Zpalette_padding)(   @   l   |   r)         Zy_flipr   l        
   r      Z	data_sizer      Zpixels_per_meterr   colorsc             S   s   t t| d S )Ngo_C@)intmathZceil)xr   r   r   <lambda>w   s    z&BmpImageFile._bitmap.<locals>.<lambda>dpi4   r_maskg_maskb_maskZa_mask$   )r9   r:   r;   Zrgb_maskZ	rgba_maskz Unsupported BMP header type (%d)l        zUnsupported BMP Size: (%dx%d))NNNz Unsupported BMP pixel depth (%d))i   i   r.   r   )i   i   r.   l      ~ )r   r   r   r   )l      ~ i   i   r   )i   i   r.   )i   i     )i |  i  r=   )r   r   r   r   ZXBGRBGRAr   zBGR;16zBGR;15))r   )i   i   r.   r   )r   )l      ~ i   i   r   )r   )i   i   r.   l      ~ )r   )r   r   r   r   )r   )i   i   r.   )r   )i   i  r=   )r   )i |  i  r=   )r>   RGBA)r   r   z Unsupported BMP bitfields layout   )r>   r?   z Unsupported BMP compression (%d)r   i   z!Unsupported BMP Palette size (%d)T)r   r.   F1Lrawr=   )fpreadseeki32r   Z
_safe_readi16r   r   tuplemapinfor    len	enumerateIOErrorZ_sizegetsizeBIT2MODEmodelistranger   r   rC   palettetellZtile)selfheaderoffsetrF   rG   	file_infoZheader_dataidxmaskZraw_modeZ	SUPPORTEDZ
MASK_MODESZpaddingrV   Z	greyscaleindicesZindvalZrgbr   r   r   _bitmapJ   s    
*



zBmpImageFile._bitmapc             C   sD   | 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 filer/   )rZ   N)rE   rF   SyntaxErrorrH   r`   )rX   Z	head_datarZ   r   r   r   _open   s
    zBmpImageFile._openN)r   r   )__name__
__module____qualname____doc__format_descriptionformatZCOMPRESSIONSr   r   r   r    r!   r"   r`   rc   r   r   r   r   r   8   s   
 5r   c               @   s   e Zd ZdZdZdd ZdS )DibImageFileZDIBzWindows Bitmapc             C   s   |    d S )N)r`   )rX   r   r   r   rc     s    zDibImageFile._openN)rd   re   rf   ri   rh   rc   r   r   r   r   rj     s   rj   )rA   r   r   )rB   r      )r   r   rk   )r   r   r   )r>   r   r   )rA   rB   r   r   r?   c          
   C   s  yt | j \}}}W n" tk
r6   td| j Y nX | j}|dd}ttdd |}| jd | d d d	 d
@ }	d}
d|
 |d  }|	| j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rvxvdD ]}|	t|d  qXW nT| jdkrxFtdD ]}|	t|d  qW n | jdkr|	| jdd t| |dd| j d||	dffg d S )Nzcannot write mode %s as BMPr7   )`   rl   c             S   s   t | d S )Ngo_C@)r3   )r5   r   r   r   r6   /  s    z_save.<locals>.<lambda>r   r-   r   r   rD   r)   ra   r   r   s   BM    rA   )r   r.   rB   rk   r   r   r   rC   )r   r   r#   )SAVErS   KeyErrorrO   ZencoderinforP   rJ   rK   rQ   writeo32o16r   rU   imZ
getpaletter   _save)rs   rE   filenameZrawmoder(   r2   rL   r7   ZppmZstriderY   rZ   Zimageir   r   r   rt   $  s8    b
rt   z.bmpz	image/bmp) r   r   r   Z_binaryr   r   rI   r   rH   r   r	   rr   r
   rq   r4   __version__rR   r   r   rj   rn   rt   Zregister_openri   Zregister_saveZregister_extensionZregister_mimer   r   r   r   <module>   s.     W7