U
    a7                     @   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   /home/adriano.carvalho/ftp/files/BrinquedotecaVirtual/brinquedotecavirtual/venv/lib/python3.8/site-packages/PIL/BmpImagePlugin.py_accept1   s    r   c                 C   s   t | dkS )N)   (   @   l   |   )i32r   r   r   r   _dib_accept5   s    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 BitmapZBMP    r   r      r      )RAWZRLE8ZRLE4	BITFIELDSZJPEGZPNGc              	   C   s  | 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rB|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rVt|d"krtd#d$d%d&gD ] \}}t|d'|d  ||< qn$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r~|d n
d|d > |d< |d-|d  kr|d dkr|d|d  7 }t|d d.\| _}	| jd/krtd0|d  d,|d | j
krd1d2d3d4d5gd6gd7d8gd9}
d:d;d<d=d=d>d?d@dA}|d |
kr|d dBkr|d* |
|d  kr||d |d* f }	dC|	krd<n| j| _nB|d dDkr|d) |
|d  kr||d |d) f }	ntdEntdEnH|d | jkr|d dBkr*|dFkr*dG\}	| _ntdH|d  d,| jdIkr2d|d   k rRdJksjn tdK|d  d,n|d }|||d  }dL}|d dkrdMntt|d }t|D ]8\}}||| || d  }|t|d krdN}q|r|d dkrdOndP| _| j}	n"dI| _t|dkr(d:nd>|| _|d | j	d< dQdd|d |d	 f|pb| j  |	|d |d  dR d? dS@ |d ffg| _d/S )Tz Read relevant info about the BMPr   header_size	directionr   r$   widthr   heightZplanes   bitscompressionr%   Zpalette_padding)r   r   r   r         Zy_flipr   l        r   
   r   	data_size   r   Z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>dpi4   r_maskg_maskb_maskZa_mask$   )r>   r?   r@   Zrgb_maskZ	rgba_maskzUnsupported BMP header type ()   )NNNzUnsupported BMP pixel depth (      r2   r$   rE   rF   r2         ~ r2   rF   rE   rH   r$   r$   r$   r$   rH   rE   rF   r$   rE   rF   r2   i   i     i |  i  rN   )r   r   r   r   ZXBGRRGBABGRAr   zBGR;16r   ))r   rD   )r   rK   )r   rI   )r   rG   )r   rJ   )r   rL   )r   rM   )r   rO   r   A)r   r   z Unsupported BMP bitfields layout   )rQ   rP   zUnsupported BMP compression (r
   i   zUnsupported BMP Palette size (Tr$   r2   F1LrawrN   )fpreadseekr    r   
_safe_readi16r'   tupleinfor(   len	enumerateOSError_sizegetBIT2MODEmodelistranger   r   rW   palettetellZtile)selfheaderoffsetrZ   r[   	file_infoZheader_dataidxmaskZraw_modeZ	SUPPORTEDZ
MASK_MODESpaddingri   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 headerrC   zNot a BMP filer3   )rm   N)rY   rZ   r   SyntaxErrorr    ru   )rk   Z	head_datarm   r   r   r   _open  s
    
zBmpImageFile._openN)r$   r$   )__name__
__module____qualname____doc__format_descriptionformatZCOMPRESSIONSitemskvvarsru   rw   r   r   r   r   r"   <   s   
 >r"   c                   @   s   e Zd ZdZdZdd ZdS )DibImageFileZDIBr#   c                 C   s   |    d S )N)ru   )rk   r   r   r   rw     s    zDibImageFile._openN)rx   ry   rz   r}   r|   rw   r   r   r   r   r     s   r   )rU   r   r   )rV   r      )r
   r   r   )r   r   r$   )rQ   r   r$   )rU   rV   r
   r   rP   c                 C   s   t | ||d d S )NF)_save)imrY   filenamer   r   r   	_dib_save,  s    r   Tc              
   C   s  zt | j \}}}W n6 tk
rJ } ztd| j d|W 5 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rdD ]}|
t|d  qnP| jdkrtdD ]}|
t|d  qn | jdkr|
| jdd t| |dd| j d||dffg d S )Nzcannot write mode z as BMPr<   )`   r   c                 S   s   t | d d S )Nr8   g      ?)int)r:   r   r   r   <lambda>;      z_save.<locals>.<lambda>r$   r1   r   r%   rX   r   r   rC   r   l    z)File size is too large for the BMP formatr       rU   rT   rV   r   r
   r   r   rW   )r$   r$   r*   )SAVErf   KeyErrorrb   Zencoderinford   r^   mapsize
ValueErrorwriteo32o16r   rh   r   Z
getpaletter   r   )r   rY   r   Zbitmap_headerrawmoder/   r7   er_   r<   ppmZstriderl   imagerm   	file_sizeir   r   r   r   0  sr    &

	
r   z.bmpz	image/bmpz.dibN)T) r   r   r   _binaryr   r]   r   r    r   r   r   r	   r   re   r   r!   r"   r   r   r   r   Zregister_openr}   Zregister_saveZregister_extensionZregister_mimer   r   r   r   <module>   sB    Z	
@