o
    jM                     @  s~  d dl mZ d dlZd dlmZmZ 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Zd8ddZd8ddZG dd dejZG dd dejZG dd  d eZd!d"d#d$d%d&Zd9d.d/Z	0d:d;d2d3Zeej ee e!ej e e"ej d4 e#ej d5 e$d6e eej ee e!ej e e"ej d7 e#ej d5 dS )<    )annotationsN)IOAny   )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                   Fprefixbytesreturnboolc                 C  s
   |  dS )N   BM)
startswithr    r    S/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/PIL/BmpImagePlugin.py_accept6   s   
r"   c                 C  s   t | dv S )N)   (   4   8   @   l   |   )i32r   r    r    r!   _dib_accept:      r+   c                   @  s\   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dZdddZdS )BmpImageFilez0Image plugin for the Windows Bitmap format (BMP)Windows BitmapZBMPr   r         r      )RAWRLE8RLE4	BITFIELDSZJPEGZPNGheaderintoffsetr   Nonec                 C  sR  | j dusJ | j j| j j}}|r|| t|ddd}t|d ts(J t| j |d d }|d dkrbt|d|d< t|d	|d
< t|d|d< t|d|d< | j	d |d< d|d< n|d dv rq|d dk|d< |d rwd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 t
sJ t
d"d# |d D | jd$< |d | j	d% krpg d&}t|d'krt|d(kr|d) nd|d)< t|D ]\}}	t|d*|d  ||	< qnd|d)< |D ]}	t|d||	< qt|d+ ts5J t|d, ts?J t|d- tsIJ t|d) tsSJ |d+ |d, |d- f|d.< |d+ |d, |d- |d) f|d/< nd0|d  d1}
t|
t|d tsJ t|d
 tsJ |d |d
 f| _t|d tsJ |d!dsd|d > |d!< t|d tsJ t|d! tsJ |d2|d  kr|d dkr||d |d!  7 }t|d d3\| _}| jsd4|d  d1}
t|
d5}|d | j	d% krg d6d7gd8d9gd:}d;d<d=d>d?d@dAd@dBdCdDdE}|d |v r|d dFkrZ|d/ ||d  v rZt|d/ t
sDJ ||d |d/ f }dG|v rUd?n| j| _np|d dHv r|d. ||d  v rt|d. t
svJ ||d |d. f }nIdI}
t|
dI}
t|
|d | j	d kr|d dFkr|dJkstrdK\}| _n|d | j	dL | j	dM fv rdN}ndO|d  d1}
t|
| jdPkrOd|d!   k rdQksn dR|d!  d1}
t|
|d }|||d!  }dS}|d! d	krdTntt|d! }t|D ]\}}||| || d  }|t|d kr)dU}q|r>|d! d	kr7dVndW| _| j}ndP| _t|dkrJd;ndB|| _|d | jd< |g}|dNkrk||d | j	dM k nt|d tsuJ ||d |d  dX d? dY@  ||d  t|dd|d |d
 f|p| j  t
|g| _dS )Zz Read relevant info about the BMPNr   )header_size	directionr;   r#   r   widthr/   heightZplanes   bitsr2   compressionr0   Zpalette_padding)r$   r%   r&   r'   r(   r)         Zy_flipr   r<   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>   s    z'BmpImageFile._bitmap.<locals>.<genexpr>dpir5   )r_maskg_maskb_mask0   r%   Za_mask$   rO   rP   rQ   Zrgb_maskZ	rgba_maskzUnsupported BMP header type ()   ) rV   zUnsupported BMP pixel depth (raw)      rC   r         ~ rY   rZ   r   r\   rZ   rC   r   r\   rY   rZ   rC   rC   rZ   rY   r\   rY   rZ   rC   r\   r\   rZ   rC   rY   r   r   r   r   rY   rZ   rC   i   i     i |  i  re   )r   r   r   r   ZXBGRZBGXRZABGRRGBABGRAZBGARr   zBGR;16r   ))r   rX   )r   r[   )r   r]   )r   r^   )r   r_   )r   r`   )r   ra   )r   rb   )r   rc   )r   rd   )r   rf   r   A)r   r   z Unsupported BMP bitfields layout   )rh   rg   r3   r4   bmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (Tr   rC   F1Lre   )fpreadseekr*   
isinstancer7   r   
_safe_readi16COMPRESSIONStupleinfolenappend	enumerateOSError_sizegetBIT2MODE_modemodeUSE_RAW_ALPHAlistranger   r   rW   palette_TiletellZtile)selfr6   r8   rq   rr   	file_infoZheader_dataZmasksidxmaskmsgZraw_modeZdecoder_nameZ	SUPPORTEDZ
MASK_MODESpaddingr   Z	grayscaleindicesindvalrgbargsr    r    r!   _bitmapM   s<  
	 


"
zBmpImageFile._bitmapc                 C  sH   | j dusJ | j d}t|sd}t|t|d}| j|d dS )z-Open file, check magic number and read headerNrU   zNot a BMP filerD   )r8   )rp   rq   r"   SyntaxErrorr*   r   )r   Z	head_datar   r8   r    r    r!   _open5  s   
zBmpImageFile._openNr   r   )r6   r7   r8   r7   r   r9   r   r9   )__name__
__module____qualname____doc__format_descriptionformatrv   itemskvvarsr   r   r    r    r    r!   r-   A   s     ir-   c                   @  s   e Zd ZdZd	ddZdS )
BmpRleDecoderTbuffer$bytes | Image.SupportsArrayInterfacer   tuple[int, int]c                 C  s  | j d usJ | jd }t }d}| jj| jj }t||k r(| j d}| j d}|r0|s1n|d }|r||| | jjkrHtd| jj| }|rqt	|d d? }	t	|d d@ }
t
|D ]}|d dkrk||	7 }q^||
7 }q^n||| 7 }||7 }n|d dkrt|| jj dkr|d7 }t|| jj dksd}n|d dkrn|d dkr| j d}t|dk rnq|\}}|d||| jj   7 }t|| jj }nR|r|d d }| j |}|D ]}|t	|d? 7 }|t	|d@ 7 }qn|d }| j |}||7 }t||k r
n||d 7 }| j  d dkr"| j dtj t||k s | jdkr0dnd}| t||d| jd	 f d
S )Nr   r   r      r/       rn   r   r:   )r:   r   )fdr   	bytearraystateZxsizeZysizery   rq   maxr   r   r   rr   osSEEK_CURr   Z
set_as_rawr   )r   r   Zrle4datarL   Zdest_lengthZpixelsbyteZ
num_pixelsZfirst_pixelZsecond_pixelindexZ
bytes_readrightupZ
byte_countZ	byte_readrawmoder    r    r!   decodeG  sr   



;zBmpRleDecoder.decodeN)r   r   r   r   )r   r   r   Z	_pulls_fdr   r    r    r    r!   r   D  s    r   c                   @  s   e Zd ZdZdZdddZdS )	DibImageFileZDIBr.   r   r9   c                 C  s   |    d S )N)r   )r   r    r    r!   r     r,   zDibImageFile._openNr   )r   r   r   r   r   r   r    r    r    r!   r     s    r   )rm   r   r/   )rn   r      )r   r   r   )r   r   r   )rh   r   r   )rm   rn   r   r   rg   imImage.Imagerp   	IO[bytes]filenamestr | bytesr9   c                 C  s   t | ||d d S )NF)_save)r   rp   r   r    r    r!   	_dib_save  s   r   Tbitmap_headerc                 C  s  z
t | j \}}}W n ty" } zd| j d}t||d }~ww | j}	|	dd}
tdd |
D }| jd | d d	 d
 d@ }d}|| jd  }| jdkr]ddd dD }n'| jdkroddd t	dD }n| jdkr| j
dd}t|d }nd }|rd| |d  }|| }|dkrd}t||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   |r|| t| |tdd| j d||d fg d S )!Nzcannot write mode z as BMPrN   )`   r   c                 s  s     | ]}t |d  d V  qdS )rI   g      ?N)r7   rJ   r    r    r!   rM         z_save.<locals>.<genexpr>r   rB   r   r0   ro   r$   r   rm       c                 s       | ]}t |d  d V  qdS r0   r   Nr   rK   ir    r    r!   rM     r   rl   rn   c                 s  r   r   r   r   r    r    r!   rM     r   r   r   r   r   r   rU   l    z)File size is too large for the BMP formatr   r   rW   r   r:   )SAVEr   KeyErrorr|   Zencoderinfor~   rw   sizejoinr   r   Z
getpalettery   
ValueErrorwriteo32o16r   r   r   )r   rp   r   r   r   r@   rH   er   rx   rN   ppmZstrider6   imager   r8   	file_sizer    r    r!   r     s   





	

 r   z.bmpz	image/bmprk   z.dib)r   r   r   r   )r   r   rp   r   r   r   r   r9   )T)
r   r   rp   r   r   r   r   r   r   r9   )%
__future__r   r   typingr   r   rV   r   r   r   _binaryr	   ru   r
   r*   r   r   r   r   r   r   r   r"   r+   r-   Z	PyDecoderr   r   r   r   r   Zregister_openr   Zregister_saveZregister_extensionZregister_mimeZregister_decoderr    r    r    r!   <module>   sT   


  L
	J