B
    -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
   )RGBzBGR;15)r   BGR)r   BGRX)r                   c             C   s   | d d dkS )N   s   BM )prefixr   r   6/tmp/pip-unpacked-wheel-rysjrues/PIL/BmpImagePlugin.py_accept1   s    r   c             C   s   t | dkS )N)   (   @   l   |   )i32)r   r   r   r   _dib_accept5   s    r   c               @   s\   e Zd ZdZdZdZdddddd	d
Zxe D ]\ZZ	e	e
 e< q0W dddZdd ZdS )BmpImageFilez2 Image plugin for the Windows Bitmap format (BMP) zWindows BitmapZBMP    r   r      r      )RAWZRLE8ZRLE4	BITFIELDSZJPEGZPNGc          	   C   sn  | j j| j j }}|r|| i }t|d|d< d|d< t| j |d d }|d dkrt|d|d< t|d|d	< t|d|d
< t|d|d< | j|d< d|d< n|d dkrJ|d dk|d< |d rdnd|d< t|d|d< |d st|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rx^td#d$d%d&gD ] \}}t|d'|d  ||< qW n(d|d&< xd(D ]}t|d||< qW |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< t|d d-\| _}	| jd.krtd/|d  d,|d | j
krd0d1d2d3d4gd5gd6d7gd8}
d9d:d;d<d<d=d>d?d@}|d |
kr|d dAkrl|d* |
|d  krl||d |d* f }	dB|	krbd;n| j| _nB|d dCkr|d) |
|d  kr||d |d) f }	ntdDntdDnH|d | jkr|d dAkr|dEkrdF\}	| _ntdG|d  d,| jdHkrd|d   k r*dIksBn tdJ|d  d,n|d }|||d  }dK}|d dkrpdLntt|d }xDt|D ]8\}}||| || d  }|t|d krdM}qW |r|d dkrdNndO| _| j}	n"dH| _t|dkrd9nd=|| _|d | j	d< dPdd|d |d	 f|p>| j  |	|d |d  dQ d? dR@ |d ffg| _d.S )Sz" Read relevant info about the BMP r   Zheader_size	directionr   r    widthr   heightZplanes   bitscompressionr!   Zpalette_padding)r   r   r   r         Zy_flipr   l        r   
   r   Z	data_size   r   Zpixels_per_meter   colorsc             s   s   | ]}|d  V  qdS )go_C@Nr   ).0xr   r   r   	<genexpr>v   s    z'BmpImageFile._bitmap.<locals>.<genexpr>dpi4   r_maskg_maskb_maskZa_mask$   )r7   r8   r9   Zrgb_maskZ	rgba_maskzUnsupported BMP header type ())NNNzUnsupported BMP pixel depth ()i   i   r-   r    )i   i   r-   l      ~ )r-   i   i   l      ~ )r    r    r    r    )l      ~ i   i   r    )i   i   r-   )i   i     )i |  i  r<   )r   r   r   r   ZXBGRRGBABGRAr   zBGR;16zBGR;15))r   )i   i   r-   r    )r   )l      ~ i   i   r    )r   )r-   i   i   l      ~ )r   )i   i   r-   l      ~ )r   )r    r    r    r    )r   )i   i   r-   )r   )i   i  r<   )r   )i |  i  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   rC   palettetellZtile)selfheaderoffsetrF   rG   	file_infoZheader_dataidxmaskZraw_modeZ	SUPPORTEDZ
MASK_MODESpaddingrU   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 header    zNot a BMP filer.   )rY   N)rE   rF   r   SyntaxErrorr   ra   )rW   Z	head_datarY   r   r   r   _open  s
    
zBmpImageFile._openN)r    r    )__name__
__module____qualname____doc__format_descriptionformatZCOMPRESSIONSitemskvvarsra   rd   r   r   r   r   r   <   s   
 <r   c               @   s   e Zd ZdZdZdd ZdS )DibImageFileZDIBzWindows Bitmapc             C   s   |    d S )N)ra   )rW   r   r   r   rd     s    zDibImageFile._openN)re   rf   rg   rj   ri   rd   r   r   r   r   ro     s   ro   )rA   r   r   )rB   r      )r
   r   rp   )r   r   r    )r>   r   r    )rA   rB   r
   r   r=   c             C   s   t | ||d d S )NF)_save)imrE   filenamer   r   r   	_dib_save*  s    rt   Tc          
   C   s  yt | j \}}}W n6 tk
rJ } ztd| j d|W d d }~X Y nX | j}|dd}	ttdd |	}
| jd | d d	 d
 d@ }d}|| jd  }|rd| |d  }|| }|dkrt	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rxvdD ]}|
t|d  qW 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 z as BMPr5   )`   ru   c             S   s   t | d d S )Ngo_C@g      ?)int)r3   r   r   r   <lambda>9      z_save.<locals>.<lambda>r    r,   r   r!   rD   r   r   rb   r   l    z)File size is too large for the BMP formats   BM    rA   )r    r-   rB   rp   r
   r   r   rC   )r    r    r%   )SAVErR   KeyErrorrN   ZencoderinforP   rJ   mapsize
ValueErrorwriteo32o16r   rT   rr   Z
getpaletter   rq   )rr   rE   rs   Zbitmap_headerrawmoder*   r1   erK   r5   ppmZstriderX   imagerY   	file_sizeir   r   r   rq   .  s:    &n
rq   z.bmpz	image/bmpz.dibN)T) r   r   r   _binaryr   rI   r   r   r   r   r   r	   r   rQ   r   r   r   ro   rz   rt   rq   Zregister_openrj   Zregister_saveZregister_extensionZregister_mimer   r   r   r   <module>   s>    X
@