
    &ThE                        d dl 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d Z G d dej                        Z G d dej&                        Z G d de      ZddddddZd Zd$dZ ej2                  ej4                  ee        ej6                  ej4                  e        ej8                  ej4                  d         ej:                  ej4                  d!        ej<                  d"e        ej2                  ej4                  ee        ej6                  ej4                  e        ej8                  ej4                  d#        ej:                  ej4                  d!       y)%    N   )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                     | d d dk(  S )N      BM prefixs    Z/home/stella.sw7ft.com/public_html/venv/lib/python3.12/site-packages/PIL/BmpImagePlugin.py_acceptr   3   s    "1:    c                     t        |       dv S )N)   (   @   l   |   )i32r   s    r   _dib_acceptr'   7   s    v;000r   c                   |    e Zd ZdZdZdZdddddd	d
Zej                         D ]  \  ZZ	e	 e
       e<    ddZd Zy)BmpImageFilez0Image plugin for the Windows Bitmap format (BMP)Windows BitmapBMPr   r   r      r      )RAWRLE8RLE4	BITFIELDSJPEGPNGc           
      
   | j                   j                  | j                   j                  }}|r ||       t         |d            dd}t	        j
                  | j                   |d   dz
        }|d   dk(  rRt        |d      |d<   t        |d      |d	<   t        |d      |d
<   t        |d      |d<   | j                  |d<   d|d<   n|d   dv rh|d   dk(  |d<   |d   rdnd|d<   t        |d      |d<   |d   st        |d      ndt        |d      z
  |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              | j                  d!<   |d   | j                  k(  rt        |      d"k\  r+t        g d#      D ]  \  }}t        |d$|dz  z         ||<    n d|d%<   d&D ]  }t         |d            ||<    |d'   |d(   |d)   f|d*<   |d'   |d(   |d)   |d%   f|d+<   nd,|d    d-}	t        |	      |d   |d	   f| _        |j                  dd      r|d   nd|d   z  |d<   |d.|d   z   k(  r|d   dk  r|d|d   z  z  }t         j                  |d   d/      \  | _        }
| j"                  d1|d    d-}	t        |	      d2}|d   | j                  k(  rg d3d4gd5d6gd7}d8d9d:d;d<d<d=d>d?d@	}|d   |v ri|d   dAk(  r2|d+   ||d      v r%||d   |d+   f   }
dB|
v rd;n| j"                  | _        n|d   dCv r|d*   ||d      v r||d   |d*   f   }
nxdD}	t        |	      dD}	t        |	      |d   | j                  k(  r|d   dAk(  rD|dEk(  r?dF\  }
| _        n4|d   | j$                  | j&                  fv rdG}ndH|d    d-}	t        |	      | j"                  dIk(  rd|d   cxk  rdJk  sn dK|d    d-}	t        |	      |d   } |||d   z        }dL}|d   dk(  rdMnt)        t+        |d               }t        |      D ]'  \  }}|||z  ||z  dz    }|t-        |      dz  k7  s&dN}) |r|d   dk(  rdOndP| _        | j"                  }
n)dI| _        t/        j0                  |dk(  rd8nd=|      | _        |d   | j                  d<   |
g}|dGk(  r"|j5                  |d   | j&                  k(         n#|j5                  |d   |d   z  dQz   dz	  dRz         |j5                  |d          |dd|d   |d	   f|xs | j                   j7                         t        |      fg| _        y0)Sz Read relevant info about the BMPr   )header_size	directionr6   r!   r   widthr   heightplanes   bitscompressionr,   palette_padding)r"   r#   r$   r%         y_flipr   r7   l        r   
   r   	data_size   r   pixels_per_meter   colorsc              3   &   K   | ]	  }|d z    yw)o_C@Nr   ).0xs     r   	<genexpr>z'BmpImageFile._bitmap.<locals>.<genexpr>v   s     $XQQ[$Xs   dpi4   )r_maskg_maskb_maska_mask$   rR   )rO   rP   rQ   rO   rP   rQ   rgb_mask	rgba_maskzUnsupported BMP header type ()   )NNNzUnsupported BMP pixel depth (raw)      r@   r         ~ rZ   r[   r   r]   rZ   r[   r@   r@   r[   rZ   r]   rZ   r[   r@   r]   r   r   r   r   rZ   r[   r@   i   i     i |  i  rd   )r   r   r   r   XBGRABGRRGBABGRAr   zBGR;16r   )	)r   rY   )r   r\   )r   r^   )r   r_   )r   r`   )r   ra   )r   rb   )r   rc   )r   re   r   A)r   r   z Unsupported BMP bitfields layout   )ri   rh   bmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (Tr   r@   F1Lrd   )fpreadseekr&   r   
_safe_readi16r.   tupleinfor1   len	enumerateOSError_sizegetBIT2MODEmoder/   r0   listranger
   r   rX   paletteappendtelltile)selfheaderoffsetrr   rs   	file_infoheader_dataidxmaskmsgraw_modedecoder_name	SUPPORTED
MASK_MODESpaddingr   	greyscaleindicesindvalrgbargss                         r   _bitmapzBmpImageFile._bitmapJ   s   WW\\477<<dL$'QLrB	  **477Im4Lq4PQ ]#r)!$[!!4Ig"%k1"5Ih"%k1"5Ih #K 3If'+xxIm$+,I'( }%);;"-a.D"8Ih*3H*=Q2Ik"!$[!!4Ig !* K#Sa00 h
 #&k1"5Ih #K 4If'*;';Im$%(b%9Ik"K$K$-I() #&k2"6Ih+,I'($$X)DV:W$XXDIIe'4>>9{#r)%.@& I	T +.k2a<*H	$I +.Ih' > 7*-d1g,	$7 h'h'h')	*% h'h'h'h'	*	+& 2)M2J1K1MC#, w'8)<<

 }}Xq) hy(( 	(
 R)M222y7HA7Ma)H---F 'll9V+<lK	8991)F2C1DAFC#, ]#t~~5 ..*,ABI 6<;A<B<B<B,205-5-5
J  I-f%+!+.)If<M2NN)9V+<i>T*UVH*-/tyyDIf%1!*-9V;L1MM)9V+<i
>S*TUH<C!#,&8cl"}%1 B&6R<&4#$)}%$))TYY)??$L1)M2J1K1MC#, 99	(+4u46y7J6K1Mcl"#$56w8)<<= 	 !*a/ eIh$789  !*' 2 *HC!#-#-!2CDCbgk)$)	* '0':a'?SDI#yyH #DI#/#3#3")Q,E7$DL
 $-]#;		- z9$KK	-0DII=>KK)G,y/@@2E!KPRSTIk*+ Ay)9X+>?($'',,.d	
	r   c                     | j                   j                  d      }t        |      sd}t        |      t	        |d      }| j                  |       y)z-Open file, check magic number and read headerrW   zNot a BMP filerB   )r   N)rq   rr   r   SyntaxErrorr&   r   )r   	head_datar   r   s       r   _openzBmpImageFile._open  sH     GGLL$	y!"Cc""Y#F#r   Nr   r   )__name__
__module____qualname____doc__format_descriptionformatCOMPRESSIONSitemskvvarsr   r   r   r   r   r)   r)   >   sZ    : *F aAVWXL""$ 1q	E
N$r   r)   c                       e Zd ZdZd Zy)BmpRleDecoderTc                    | j                   d   }t               }d}t        |      | j                  j                  | j                  j
                  z  k  r| j                  j                  d      }| j                  j                  d      }|r|sn|d   }|r||z   | j                  j                  kD  r#t        d| j                  j                  |z
        }|rFt        |d   dz	        }t        |d   dz        }	t        |      D ]  }
|
dz  dk(  r||z  }||	z  } n|||z  z  }||z  }n|d   dk(  rTt        |      | j                  j                  z  dk7  r+|dz  }t        |      | j                  j                  z  dk7  r+d}nu|d   dk(  rn|d   dk(  r| j                  j                  d      }t        |      dk  rns| j                  j                  d      \  }}|d||| j                  j                  z  z   z  z  }t        |      | j                  j                  z  }n|rM|d   dz  }| j                  j                  |      }|D ]$  }|t        |dz	        z  }|t        |dz        z  }& n%|d   }| j                  j                  |      }||z  }t        |      |k  rn||d   z  }| j                  j                         dz  dk7  r*| j                  j                  dt        j                         t        |      | j                  j                  | j                  j
                  z  k  r| j                  dk(  rdnd}| j!                  t#        |      |d| j                   d	   f       y
)Nr   r   r      r       ro   r   r5   )r5   r   )r   	bytearrayrx   statexsizeysizefdrr   maxr
   r   r   rs   osSEEK_CURr~   
set_as_rawbytes)r   bufferrle4datarK   pixelsbyte
num_pixelsfirst_pixelsecond_pixelindex
bytes_readrightup
byte_count	byte_readrawmodes                    r   decodezBmpRleDecoder.decode"  s"   yy|{$i$****TZZ-=-===WW\\!_F77<<?DJz>DJJ$4$44!$Q

(8(81(<!=J"$T!W\"2K#%d1gn#5L!&z!2 1 19> K/D L0D	1 D:--DZ7a<d)djj&6&66!; d)djj&6&66!;A!W\!W\!%aJ:* $QIE2GurDJJ4D4D/D'DEEDD	DJJ$4$44A %)!W\
%)WW\\*%=
)3 9I ByA~$66D By4'7$88D9 &*!W
%)WW\\*%=

*:3aLA ww||~)Q.Q4u $i$****TZZ-=-===v c)#sdgq$))B-%@Ar   N)r   r   r   	_pulls_fdr   r   r   r   r   r     s    IAr   r   c                       e Zd ZdZdZd Zy)DibImageFileDIBr*   c                 $    | j                          y )N)r   )r   s    r   r   zDibImageFile._openm  s    r   N)r   r   r   r   r   r   r   r   r   r   r   i  s    F)r   r   )rn   r   r   )ro   r      )r   r   r   )r   r   r   )ri   r   r   )rn   ro   r   r   rh   c                      t        | ||d       y )NF)_save)imrq   filenames      r   	_dib_saver     s    	"b(E"r   c           
      F   	 t         | j                     \  }}}| j                  }	|	j                  dd      }
t        t        d |
            }| j                  d   |z  dz   dz  d	z   d
z  }d}|| j                  d   z  }| j                  dk(  rdj                  d dD              }nm| j                  dk(  r"dj                  d t        d      D              }n<| j                  dk(  r+| j                  j                  dd      }t        |      dz  }nd }|rWd|z   |dz  z   }||z   }|dkD  rd}t        |      |j                  dt!        |      z   t!        d      z   t!        |      z          |j                  t!        |      t!        | j                  d         z   t!        | j                  d         z   t#        d      z   t#        |      z   t!        d      z   t!        |      z   t!        |d         z   t!        |d         z   t!        |      z   t!        |      z          |j                  d|dz
  z         |r|j                  |       t%        j&                  | |dd| j                  z   d||dffg       y # t        $ r!}d| j                   d}t        |      |d }~ww xY w) Nzcannot write mode z as BMPrM   )`   r   c                 $    t        | dz  dz         S )NrI   g      ?)int)rK   s    r   <lambda>z_save.<locals>.<lambda>  s    c!g+"34 r   r   r?   r   r,   rp   r"   r   rn   r   c              3   8   K   | ]  }t        |      d z    ywr   Nr	   rJ   is     r   rL   z_save.<locals>.<genexpr>  s     72a5197   rm   ro   c              3   8   K   | ]  }t        |      d z    ywr   r	   r   s     r   rL   z_save.<locals>.<genexpr>  s     92a5199r   r   r   r   r   r   rW   l    z)File size is too large for the BMP formatr   r   rX   r   r5   )SAVEr~   KeyErrorrz   encoderinfor|   rv   mapsizejoinr   r   
getpaletterx   
ValueErrorwriteo32o16r   r   )r   rq   r   bitmap_headerr   r<   rG   er   rw   rM   ppmstrider   imager   r   	file_sizes                     r   r   r     s   " $RWWv
 >>D
((5(
#C 4c:
;CwwqzD 1$*Q.26FFRWWQZE	ww#~((7h77	C((9eCj99	C%%""5&1W" fvz)UN	y =CS/!
)n!f &k	
 HHF
bggaj/	
bggaj/	 a&	 d)		
 a&	 e*	 c!f+	 c!f+	 f+		 f+
	 HHUfrk"#
OOBeVbgg%5q7FB:OPQRw  ""277)73cl!"s   I6 6	J ?JJ z.bmpz	image/bmprl   z.dib)T)r    r   r   r   _binaryr   ru   r   r&   r
   r   r   r   r   r}   r   r'   r)   	PyDecoderr   r   r   r   r   register_openr   register_saveregister_extensionregister_mimeregister_decoderr   r   r   <module>r      sv  6 
 , , ! !  ! ! 1^$9&& ^$BDI'' DT<  
		#>SL   L''w ?   L'' /   ,,f 5   L'' 5   y- 0   L''{ C   L'' 3   ,,f 5   L'' 5r   