
&"V1                 @   s`  d  d l  m Z m Z m Z m Z d  d l Z d Z e j Z e j Z	 e j
 Z e j Z e j Z e j Z i d! d 6d" d 6d# d	 6d$ d 6d% d 6d& d 6Z d d   Z Gd d   d e j  Z Gd d   d e  Z i d' d 6d( d 6d) d 6d* d
 6d+ d 6Z d  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_binaryNz0.7PP;1   P;4      RGBBGR;15   BGR   BGRX    c             C   s   |  d  d  d k S)N   s   BM )prefixr   r   4/tmp/pip-build-fj3bmf4v/Pillow/PIL/BmpImagePlugin.py_accept6   s    r   c               @   s   e  Z d  Z d Z d Z d Z i d d 6d d 6d d	 6d
 d 6d d 6d d 6Z d \ Z Z Z	 Z
 Z Z d d d d  Z d d   Z d S)BmpImageFilez2 Image plugin for the Windows Bitmap format (BMP) zWindows BitmapZBMPr   RAWr   RLE8r   RLE4   	BITFIELDSr
   JPEG   PNGc             C   s  |  j  j |  j  j } } | r, | |  n  t   } t | d   | d <dI | d <t j |  j  | d d  } | d d k rt | d d   | d <t | d d   | d	 <t | d d
   | d <t | d
 d   | d <|  j | d <d | d <n| d dJ k r| d d k rt	 | d  d k | d <| d rNd n dK | d <t | d d   | d <| d st | d d   n dL 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 rt |  d$ k rx t d% d& d' d( g  D]6 \ } } t | d) | d d | d   | | <qWn3 x0 d% d& d' d( g D] } t | d   | | <q W| d% | d& | d' f | d* <| d% | d& | d' | d( f | d+ <qqn t d, | d   | d | d	 f |  _ | j d  d  r| d  n d | d >| d  <| d | d	 dM k rt d. |  j   n  t j | d dN  \ |  _ }	 |  j d/ k rZt d0 | d   n  | d |  j k ri dO dP dQ g d 6dR g d 6dS dT g d 6}
 i d8 dV 6d9 dX 6d9 dZ 6d: d\ 6d; d^ 6d< d` 6} | d |
 k r| d d k r;| d+ |
 | d k r;| | d | d+ f }	 |	 da k r,d= n |  j |  _ q| d db k r~| d* |
 | d k r~| | d | d* f }	 qt d>   qt d>   nX | d |  j k r| d d k r| d? k rdc \ }	 |  _ qn t d@ | d   |  j dA k rFd | d  k  odB k n s:t dC | d    qF| d } | | | d   } dD } | d  d k rtdd n t t | d    } xU t |  D]G \ } } | | | | | d  } | t |  d k rdE } qqW| r| d  d k rdF n dG |  _ |  j }	 qFdA |  _ t j | d k r4d8 n d: |  |  _ n  | d |  j d <dH d d | d | d	 f | p|  j  j   |	 | d | d d- d ?de @| d f f g |  _ d/ S)fz" Read relevant info about the BMP r
   Zheader_sizer   Z	direction   r   r   widthheight   Zplanesr   bits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mathceil)xr   r   r   <lambda>i   s    z&BmpImageFile._bitmap.<locals>.<lambda>dpi4   Zr_maskZg_maskZ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   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*   rG   l        l        )NN)r:   r;   r,   r   )r:   r;   r,   r<   )r   r   r   r   )r:   r;   r,   )r=   r>   r9   )r?   r@   r9   r:   r;   r,   r   )r   rH   r:   r;   r,   r<   )r   rI   r   r   r   r   )r   rJ   r:   r;   r,   )r   rK   r=   r>   r9   )r   rL   r?   r@   r9   )r   rM   )rA   )r   r   )rA   rB   )r   r,   )fpreadseekdicti32r   
_safe_readi16r   i8tuplemapinfor   len	enumerateIOErrorsizegetBIT2MODEmodelistrangeo8r   rF   palettetellZtile)selfheaderoffsetrP   rQ   	file_infoZheader_dataidxmaskZraw_modeZ	SUPPORTEDZ
MASK_MODESpaddingrd   Z	greyscaleindicesindvalZrgbr   r   r   _bitmapG   s    	
>0
%1/.

(!( 
,	*,zBmpImageFile._bitmapc             C   sa   |  j  j d  } | d d  d k r7 t d   n  t | d d   } |  j d |  d S)	z/ Open file, check magic number and read header    r   r   s   BMzNot a BMP filer-   rh   N)rO   rP   SyntaxErrorrS   rp   )rf   Z	head_datarh   r   r   r   _open   s
    zBmpImageFile._openN)r   r   r   r   r
   r   )__name__
__module____qualname____doc__format_descriptionformatZCOMPRESSIONSr   r   r   r   r   r    rp   rs   r   r   r   r   r   =   s   0vr   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)rp   )rf   r   r   r   rs      s    zDibImageFile._openN)rt   ru   rv   ry   rx   rs   r   r   r   r   rz      s   rz   rD   r   rE      rA   rB   c             C   s{  y t  |  j \ } } } Wn% t k
 rA t d |  j   Yn X| rL | S|  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 rx d D] } | j	 t |  d  qWnn |  j d k rx\ t d  D] } | j	 t |  d  qWn. |  j d k rE| j	 |  j j d d   n  t j |  | d d |  j d | |
 d f f g  d  S)Nzcannot write mode %s as BMPr6   `   c             S   s   t  |  d  S)Ngo_C@)r1   )r4   r   r   r   r5      s    z_save.<locals>.<lambda>r   r+   r   r   r'   rq   r
   r   s   BMs    rD   r,   rE   r{   r   r   r   rF   )r|   r|   rN   )r   r,   )r   r   rG   )SAVEr`   KeyErrorr\   Zencoderinfor^   rW   rX   r]   writeo32o16rc   rb   imZ
getpaletter   _save)r   rO   filenamecheckrawmoder%   r0   rY   r6   ppmZstriderg   rh   imageir   r   r   r      s<    	!yr   z.bmpz	image/bmp)r   r   )r   r	   )r   r   )RGBr   )r   BGR)r   zBGRX)rD   r   r   )rE   r   r{   )r   r   r{   )r   r   r   )zBGRAr   r   )ZPILr   r   r   r   r2   __version__rV   Zi16lerU   Zi32lerS   rc   Zo16ler   Zo32ler   r_   r   r   rz   r}   r   Zregister_openry   Zregister_saveZregister_extensionZregister_mimer   r   r   r   <module>   s:   "						

9