o
    ZhH                     @  sv  d dl mZ d dlZd dl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d7ddZd7d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d8d-d.Z	/d9d:d1d2Zeejee eeje e ejd3 e!ejd4 e"d5e eejee eeje e ejd6 e!ejd4 dS );    )annotationsN)IO   )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                   prefixbytesreturnboolc                 C  s   | d d dkS )N      BM r   r   r   I/var/www/html/lang_env/lib/python3.10/site-packages/PIL/BmpImagePlugin.py_accept4   s   r!   c                 C  s   t | dv S )N)   (   4   8   @   l   |   )i32r   r   r   r    _dib_accept8      r*   c                   @  sZ   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dZdS )BmpImageFilez0Image plugin for the Windows Bitmap format (BMP)Windows BitmapBMPr   r   r      r      )RAWRLE8RLE4	BITFIELDSZJPEGZPNGc                 C  s
  | j j| j j}}|r|| t|ddd}t| j |d d }|d dkrOt|d|d< t|d|d	< t|d|d
< t|d|d< | j|d< d|d< n|d dv r(|d dk|d< |d rddnd|d< t|d|d< |d sxt|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'g d#}t|d$krt|d%kr|d& nd|d&< t|D ]\}}	t|d'|d  ||	< qnd|d&< |D ]
}	t|d||	< q|d( |d) |d* f|d+< |d( |d) |d* |d& f|d,< nd-|d  d.}
t|
|d |d	 f| _|ddrH|d nd|d > |d< |d/|d  krh|d dkrh|d|d  7 }t|d d0\| _}| jd1u rd2|d  d.}
t|
d3}|d | j
kr g d4d5gd6d7gd8}d9d:d;d<d=d>d?d>d@dAdBdC}|d |v r|d dDkr|d, ||d  v r||d |d, f }dE|v rd=n| j| _n]|d dFv r|d+ ||d  v r||d |d+ f }n@dG}
t|
dG}
t|
|d | jkr|d dDkr|dHkrdI\}| _n|d | j| jfv r(dJ}ndK|d  d.}
t|
| jdLkrd|d   k rHdMksUn dN|d  d.}
t|
|d }|||d  }dO}|d dkrldPntt|d }t|D ]\}}||| || d  }|t|d krdQ}qx|r|d dkrdRndS| _| j}ndL| _t|dkrd9nd@|| _|d | j	d< |g}|dJkr||d | jk n||d |d  dT d? dU@  ||d  |dd|d |d	 f|p| j  t|fg| _d1S )Vz Read relevant info about the BMPr   )header_size	directionr6   r"   r   widthr   heightZplanes   bitscompressionr/   Zpalette_padding)r#   r$   r%   r&   r'   r(         Zy_flipr   r7   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>dpi)r_maskg_maskb_mask0   r$   Za_mask$   rJ   rK   rL   Zrgb_maskZ	rgba_maskzUnsupported BMP header type ()   )NNNzUnsupported BMP pixel depth (raw)      r>   r         ~ rS   rT   r   rV   rT   r>   r   rV   rS   rT   r>   r>   rT   rS   rV   rS   rT   r>   rV   rV   rT   r>   rS   r   r   r   r   rS   rT   r>   i   i     i |  i  r_   )r   r   r   r   ZXBGRZBGXRZABGRRGBABGRAZBGARr   zBGR;16r   ))r   rR   )r   rU   )r   rW   )r   rX   )r   rY   )r   rZ   )r   r[   )r   r\   )r   r]   )r   r^   )r   r`   r   A)r   r   z Unsupported BMP bitfields layout   )rb   ra   bmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (Tr   r>   F1Lr_   )fpreadseekr)   r   
_safe_readi16r1   tupleinfor4   lenappend	enumerateOSError_sizegetBIT2MODE_modemoder2   r3   listranger   r   rQ   palettetellZtile)selfheaderoffsetrk   rl   	file_infoZheader_datamasksidxmaskmsgZraw_modeZdecoder_nameZ	SUPPORTEDZ
MASK_MODESpaddingr|   Z	grayscaleindicesindvalrgbargsr   r   r    _bitmapK   s  

	

 


"
zBmpImageFile._bitmapr   Nonec                 C  s:   | j d}t|sd}t|t|d}| j|d dS )z-Open file, check magic number and read headerrP   zNot a BMP filer?   )r   N)rj   rk   r!   SyntaxErrorr)   r   )r~   Z	head_datar   r   r   r   r    _open  s   
zBmpImageFile._openNr   r   r   r   )__name__
__module____qualname____doc__format_descriptionformatZCOMPRESSIONSitemskvvarsr   r   r   r   r   r    r,   ?   s    
 Ur,   c                   @  s   e Zd ZdZd	ddZdS )
BmpRleDecoderTbufferr   r   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 rnu| j d\}}|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r4dnd}| t||d| jd	 f d
S )Nr   r   r      r       rh   r   r5   )r5   r   )fdr   	bytearraystateZxsizeZysizerq   rk   maxr   r{   r}   rl   osSEEK_CURry   Z
set_as_rawr   )r~   r   Zrle4datarG   Zdest_lengthZpixelsbyteZ
num_pixelsZfirst_pixelZsecond_pixelindexZ
bytes_readrightupZ
byte_countZ	byte_readrawmoder   r   r    decode0  sr   



;zBmpRleDecoder.decodeN)r   r   r   r   )r   r   r   Z	_pulls_fdr   r   r   r   r    r   -  s    r   c                   @  s   e Zd ZdZdZdddZdS )	DibImageFileZDIBr-   r   r   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   y  s    r   )rg   r   r   )rh   r      )r   r   r   )r   r   r   )rb   r   r   )rg   rh   r   r   ra   imImage.Imagerj   	IO[bytes]filenamestr | bytesr   c                 C  s   t | ||d d S )NF)_save)r   rj   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| |dd| j d||d ffg d S )!Nzcannot write mode z as BMPrI   )`   r   c                 s  s     | ]}t |d  d V  qdS )rD   g      ?N)intrE   r   r   r    rH     s    z_save.<locals>.<genexpr>r   r=   r   r/   ri   r#   r   rg       c                 s      | ]	}t |d  V  qdS r   Nr
   rF   ir   r   r    rH         rf   rh   c                 s  r   r   r
   r   r   r   r    rH     r   r   r   r   r   r   rP   l    z)File size is too large for the BMP formatr   r   rQ   r   r5   )SAVEry   KeyErrorrt   Zencoderinforv   ro   sizejoinr{   r   Z
getpaletterq   
ValueErrorwriteo32o16r   r   )r   rj   r   r   r   r;   rC   er   rp   rI   ppmZstrider   imager|   r   	file_sizer   r   r    r     s~   





	

(r   z.bmpz	image/bmpre   z.dib)r   r   r   r   )r   r   rj   r   r   r   r   r   )T)
r   r   rj   r   r   r   r   r   r   r   )#
__future__r   r   typingr    r   r   r   _binaryr   rn   r	   r)   r   r   r   r   r   rw   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>   sP   

 oL
	H