zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
U
T±dÚFã@sTddlZddlmZmZmZddlmZddlmZ    ddlm
Z
ddlm Z ddlm Zd    d
d d d ddœZdd„Zdd„ZGdd„dejƒZGdd„dejƒZGdd„deƒZddddddœZd d!„Zd)d#d$„Ze ejee¡e eje¡e ejd%¡e ejd&¡e d'e¡e ejee¡e eje¡e ejd(¡e ejd&¡dS)*éNé)ÚImageÚ    ImageFileÚ ImagePalette)Úi16le)Úi32le©Úo8)Úo16le)Úo32le)ÚPzP;1)r zP;4)r r )ÚRGBúBGR;15)r ÚBGR)r ÚBGRX)rééééé cCs|dd…dkS)NéóBM©©ÚprefixrrúId:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\PIL/BmpImagePlugin.pyÚ_accept3srcCs t|ƒdkS)N)é é(é@élé|)Úi32rrrrÚ _dib_accept7sr#c@sXeZdZdZdZdZdddddd    d
œZe ¡D]\ZZ    e    e
ƒe<q.dd d „Z d d„Z dS)Ú BmpImageFilez0Image plugin for the Windows Bitmap format (BMP)úWindows BitmapZBMPrrréré)ÚRAWÚRLE8ÚRLE4Ú    BITFIELDSZJPEGZPNGc
Csü|jj|jj}}|r||ƒt|dƒƒddœ}t |j|dd¡}|ddkr t|dƒ|d<t|dƒ|d    <t|dƒ|d
<t|d ƒ|d <|j|d <d|d<n°|ddkr8|ddk|d<|drÊdnd|d<t|dƒ|d<|dsòt|dƒn dt|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<td d!„|dDƒƒ|j    d"<|d |j
krPt |ƒd#krØt d$d%d&d'gƒD] \}}t|d(|dƒ||<q´n$d|d'<d)D]}t|dƒƒ||<qä|d$|d%|d&f|d*<|d$|d%|d&|d'f|d+<nd,|d›d-}    t |    ƒ‚|d|d    f|_| dd¡rx|dn
d|d >|d<|d.|dkr¸|d dkr¸|d|d7}t |d d/¡\|_}
|jd0kròd1|d ›d-}    t |    ƒ‚d2} |d |j
krðd3d4d5d6d7d8gd9gd:d;gd<œ} d=d>d?d@dAdAdBdCdDdEœ    } |d | krâ|d dFkrš|d+| |d krš| |d |d+f}
dG|
krd@n|j|_nF|d dHkrÔ|d*| |d krÔ| |d |d*f}
n dI}    t |    ƒ‚n dI}    t |    ƒ‚nh|d |jkr$|d dFkrX|dJkrXdK\}
|_n4|d |j|jfkr@dL} ndM|d ›d-}    t |    ƒ‚|jdNkrdd|dkr€dOksœndP|d›d-}    t |    ƒ‚nÈ|d}|||dƒ}dQ}|ddkrÊdRntt|dƒƒ}t |ƒD]8\}}|||||d…}|t|ƒdkrâdS}qâ|rB|ddkr4dTndU|_|j}
n"dN|_t |dkrZd=ndB|¡|_|d |j    d <|
g}| dLkr˜| |d |jk¡n"| |d|d dVd?dW@¡| |d¡| dd|d|d    f|pê|j ¡t|ƒfg|_d0S)Xz Read relevant info about the BMPréÿÿÿÿ)Ú header_sizeÚ    directionr-rrÚwidthrÚheightZplaneséÚbitsÚ compressionr&Zpalette_padding)rrr r!ééÿZy_fliprr.lré
rÚ    data_sizeérZpixels_per_meteréÚcolorscss|]}|dVqdS)çóÒo_¯C@Nr)Ú.0ÚxrrrÚ    <genexpr>vsz'BmpImageFile._bitmap.<locals>.<genexpr>Údpié4Úr_maskÚg_maskÚb_maskZa_maské$)rArBrCZrgb_maskZ    rgba_maskzUnsupported BMP header type (ú)é)NNNzUnsupported BMP pixel depth (Úraw©éÿéÿr5r©ì~rIrJr©rLrIrJr5©r5rJrIrL©rIrJr5rL©rrrr©rIrJr5©iøiàé©i|iàrS)rrrrZXBGRZABGRÚRGBAÚBGRArzBGR;16r)    )rrH)rrK)rrM)rrN)rrO)rrP)rrQ)rrR)rrTrÚA)rrz Unsupported BMP bitfields layouté)rVrUÚbmp_rlezUnsupported BMP compression (r izUnsupported BMP Palette size (T©rr5FÚ1ÚLrSéüÿÿÿ)ÚfpÚreadÚseekr"rÚ
_safe_readÚi16r(ÚtupleÚinfor+ÚlenÚ    enumerateÚOSErrorÚ_sizeÚgetÚBIT2MODEÚmoder)r*ÚlistÚranger    rrGÚpaletteÚappendÚtellZtile)ÚselfÚheaderÚoffsetr_r`Ú    file_infoZ header_dataÚidxÚmaskÚmsgZraw_modeZ decoder_nameZ    SUPPORTEDZ
MASK_MODESÚpaddingrnZ    greyscaleÚindicesÚindÚvalZrgbÚargsrrrÚ_bitmapJs 
 ÿ  ýþ
ÿ 
ýü
 
ÿ 
ý  úö ÷ 
ÿþ
ÿþ
 
 
 
ÿýÿ
"üÿzBmpImageFile._bitmapcCs:|j d¡}t|ƒs d}t|ƒ‚t|dƒ}|j|ddS)z-Open file, check magic number and read headerrFzNot a BMP filer6)rsN)r^r_rÚ SyntaxErrorr"r})rqZ    head_datarwrsrrrÚ_opens  
zBmpImageFile._openN)rr) Ú__name__Ú
__module__Ú __qualname__Ú__doc__Úformat_descriptionÚformatZ COMPRESSIONSÚitemsÚkÚvÚvarsr}rrrrrr$>s 
Hr$c@seZdZdZdd„ZdS)Ú BmpRleDecoderTcCst|jd}tƒ}d}t|ƒ|jj|jjkr@|j d¡}|j d¡}|rN|sRq@|d}|rè|||jjkr€td|jj|ƒ}|rÒt    |dd?ƒ}t    |dd@ƒ}    t
|ƒD]"}
|
ddkrÆ||7}q¬||    7}q¬n |||7}||7}q|ddkrt|ƒ|jjdkr|d7}qöd}q|ddkr0q@q|ddkr–|j d¡} t| ƒdkr\q@|j d¡\} } |d| | |jj7}t|ƒ|jj}q|râ|dd}|j |¡} | D]&}|t    |d?ƒ7}|t    |d@ƒ7}q¸n|d}|j |¡} || 7}t| ƒ|krq@||d7}|j  ¡ddkr|j  dt j¡q|jdkrPdnd}| t|ƒ|d|jd    f¡d
S) Nrrrérór\r r,)r,r)r|Ú    bytearrayreÚstateZxsizeZysizeÚfdr_Úmaxr    rmrpr`ÚosÚSEEK_CURrkZ
set_as_rawÚbytes)rqÚbufferZrle4Údatar=ZpixelsÚbyteZ
num_pixelsZ first_pixelZ second_pixelÚindexÚ
bytes_readÚrightZupZ
byte_countZ    byte_readÚrawmoderrrÚdecode"sf
 
 
 
     zBmpRleDecoder.decodeN)r€rr‚Z    _pulls_fdr›rrrrrŠsrŠc@seZdZdZdZdd„ZdS)Ú DibImageFileZDIBr%cCs | ¡dS)N)r})rqrrrrmszDibImageFile._openN)r€rr‚r…r„rrrrrrœisrœ)r[rr)r\ré)r rr)rrr)rVrr)r[r\r r rUcCst|||dƒdS)NF)Ú_save)Úimr^ÚfilenamerrrÚ    _dib_savesr¡Tc
Cs&zt|j\}}}Wn:tk
rN}zd|j›d}t|ƒ|‚W5d}~XYnX|j}    |     dd¡}
ttdd„|
ƒƒ} |jd|dd    d
d @} d } | |jd }|jdkrÄd     dd„dDƒ¡}nP|jdkrèd     dd„t
dƒDƒ¡}n,|jdkr|j   dd¡}t |ƒd}nd}|rjd| |d}||}|dkrHd}t|ƒ‚| dt|ƒtdƒt|ƒ¡| t| ƒt|jdƒt|jd ƒtd ƒt|ƒtdƒt|ƒt| dƒt| d ƒt|ƒt|ƒ¡| d| d ¡|rþ| |¡t ||dd |jd|| d!ffg¡dS)"Nzcannot write mode z as BMPr?)é`r¢cSst|ddƒS)Nr;gà?)Úint)r=rrrÚ<lambda>óz_save.<locals>.<lambda>rr4rr&r]rrr[r¥css|]}t|ƒdVqdS©rNr©r<Úirrrr>–sz_save.<locals>.<genexpr>rZr\css|]}t|ƒdVqdSr¦rr§rrrr>˜srr r rrrFlÿÿz)File size is too large for the BMP formatrrŒrG)rrr,)ÚSAVErkÚKeyErrorrgZ encoderinforircÚmapÚsizeÚjoinrmrŸZ
getpalettereÚ
ValueErrorÚwriteÚo32Úo16rrž)rŸr^r Z bitmap_headerršr2r:Úerwrdr?ÚppmZstriderrÚimagernrsÚ    file_sizerrrržƒsz 
 
 
ÿþýÿ ÿ þýüûú
ù
ø    ÷
öÿ
ržz.bmpz    image/bmprYz.dib)T)r‘ÚrrrÚ_binaryrrbrr"r    r
r±r r°rjrr#r$Z    PyDecoderrŠrœr©r¡ržZ register_openr…Z register_saveZregister_extensionZ register_mimeZregister_decoderrrrrÚ<module>sH     ù bJû    
F