)EjOddlmZddlZddlmZmZddlmZmZm Z ddl m Z ddl m Zddl mZdd l mZdd l mZd d d ddddZdZd4dZd4dZGddejZGddejZGddeZdd d!d"d#d$Zd5d,Z d6d7d/Zejej eeej!ej eej"ej d0ej#ej d1ej$d2eejej eeej!ej eej"ej d3ej#ej d1dS)8) annotationsN)IOAny)Image ImageFile ImagePalette)i16le)i32leo8)o16le)o32le)PzP;1)rzP;4)rr)RGBBGR;15)rBGR)rBGRX)r Fprefixbytesreturnboolc,|dS)NBM) startswithrs DC:\PYTHON\MyICR_Suite\python\Lib\site-packages\PIL/BmpImagePlugin.py_acceptr#6s   U # ##c$t|dvS)N) (48@l|)i32r!s r" _dib_acceptr.:s v;;8 88r$ceZdZdZdZdZdddddd d ZeD]\ZZ e e e<dddZ ddZ dS) BmpImageFilez0Image plugin for the Windows Bitmap format (BMP)Windows BitmapBMPrrr)RAWRLE8RLE4 BITFIELDSJPEGPNGheaderintoffsetrNonec (|jJ|jj|jj}}|r ||t|ddd}t |dt sJt j|j|ddz }|ddkrct|d|d<t|d |d <t|d|d <t|d |d <|j d|d<d|d<n|ddvr|ddk|d<|drdnd|d<t|d|d<|dst|dndt|dz |d <t|d|d <t|d|d <t|d|d<t|d|d<t|dt|df|d<t|d |d!<d|d<t |dtsJtd"|dD|j d#<|d|j d$krHgd%}t|d&kr]t|d'kr| d(nd|d(<t|D]\}} t|d)|dzz|| <n%d|d(<|D]} t|d|| <t |d*t sJt |d+t sJt |d,t sJt |d(t sJ|d*|d+|d,f|d-<|d*|d+|d,|d(f|d.<nd/|dd0} t| t |dt sJt |d t sJ|d|d f|_t |d t sJ|d!dsd|d z|d!<t |dt sJt |d!t sJ|d1|dzkr |d dkr||d|d!zz }t$|d d2\|_} |jsd3|d d0} t| d4} |d|j d$krgd5d6gd7d8gd9} d:d;dd?d@d?dAdBdCdD }|d | vr|d dEkr\|d.| |d vrFt |d.tsJ||d |d.f} dF| vrd>n|j|_n|d dGvrJ|d-| |d vr4t |d-tsJ||d |d-f} ndH} t| dH} t| |d|j dkr$|d dEkr|dIkst*r dJ\} |_n@|d|j dK|j dLfvrdM} ndN|dd0} t| |jdOkrd|d!cxkrdPksndQ|d!d0} t| |d}|||d!z}dR}|d!d krdSn!t-t/|d!}t|D]0\}}|||z||zdz}|t1|dzkrdT}1|r|d!d krdUndV|_|j} n)dO|_t3j|dkrd:ndA||_|d|j d<| g}| dMkr+| |d|j dLknJt |dt sJ| |d|d zdWzdz dXz| |dt j| dd|d|d f|p|jt|g|_dS)Yz Read relevant info about the BMPNr) header_size directionrBr&rwidthr3heightplanesbitsr6 compressionr4palette_padding)r'r(r)r*r+r,y_fliprrClr r data_sizerpixels_per_metercolorsc3 K|] }|dz V dS)o_C@N.0xs r" z'BmpImageFile._bitmap..s&$X$XQQ[$X$X$X$X$X$Xr$dpir9)r_maskg_maskb_mask0r(a_mask$r\r]r^rgb_mask rgba_maskzUnsupported BMP header type ())rfzUnsupported BMP pixel depth (raw)rLr~rirjrrlrjrLrrlrirjrLrLrjrirlrirjrLrlrlrjrLrirrrrrirjrLiii|iru)rrrrXBGRBGXRABGRRGBABGRABGARrzBGR;16r) )rrh)rrk)rrm)rrn)rro)rrp)rrq)rrr)rrs)rrt)rrvrA)rrz Unsupported BMP bitfields layout)r{rzr7r8bmp_rlezUnsupported BMP compression (rizUnsupported BMP Palette size (TrrLF1Lru)fpreadseekr- isinstancer=r _safe_readi16 COMPRESSIONStupleinfolenappend enumerateOSError_sizegetBIT2MODE_modemode USE_RAW_ALPHAlistranger r rgpalette_Tiletelltile)selfr<r>rr file_info header_datamasksidxmaskmsgraw_mode decoder_name SUPPORTED MASK_MODESpaddingr grayscaleindicesindvalrgbargss r"_bitmapzBmpImageFile._bitmapMs w"""W\47 > )M2C88888*47Im4Lq4PQQ ] #r ) )!$[!!4!4Ig "%k1"5"5Ih "%k1"5"5Ih  #K 3 3If '+'8'?Im $+,I' ( (} %)C C C"-a.D"8Ih *3H*=%EQQ2Ik "!$[!!4!4Ig !*1K###Sa000 h  #&k1"5"5Ih  #K 4 4If '*;';';Im $%(b%9%9Ik "K$$K$$-I( )#&k2"6"6Ih +,I' (i(:;UCC C CC$$X$X)DV:W$X$X$XXXDIe '4+<[+III666{##r));''2-- X.....1 (+%.u%5%5II T*-k2a<*H*H $I+.Ih' %77*-dd1gg,, $!)H"5s;;;;;!)H"5s;;;;;!)H"5s;;;;;!)H"5s;;;;;h'h'h') *% h'h'h'h' * +&N)M2JMMMC#,, )G,c22222)H-s33333w'8)<< )F+S11111}}Xq)) 9"#y'8"8Ih )$56<<<<<)H-s33333 R)M22 2 2y7HA7M7M i 12Yx5HH HF (||If,=xHH Hy F)F2CFFFC#,,  ] #t'8'E E E   ..*,AB ; ;I6<;A7=T*UVH+.(?? DJJf%11!*-9V;L1MMM%i &;UCCCCC)9V+S*TUHH?($',,..d     r$c|jJ|jd}t|sd}t|t |d}||dS)z-Open file, check magic number and read headerNrezNot a BMP filerN)r>)rrr# SyntaxErrorr-r)r head_datarr>s r"_openzBmpImageFile._open5sqw"""GLL$$ y!! #"Cc"" "Y## F #####r$Nrr)r<r=r>r=rr?rr?) __name__ __module__ __qualname____doc__format_descriptionformatritemskvvarsrrrVr$r"r0r0As::* FaAVWXXL""$$1q f f f f f P $ $ $ $ $ $r$r0ceZdZdZddZdS) BmpRleDecoderTbufferImage.DecoderInputrtuple[int, int]c|jJ|jd}t}d}|jj|jjz}t ||kr|jd}|jd}|r|snp|d}|r||z|jjkrtd|jj|z }|rWt|ddz } t|ddz} t|D]} | dzdkr|| z }|| z }n|||zz }||z }n|ddkrIt ||jjzdkr%|dz }t ||jjzdk%d}ne|ddkrnk|ddkri|jd} t | dkrn0| \} }|d| ||jjzzzz }t ||jjz}n|rU|ddz}|j|} | D],}|t|dz z }|t|dzz }-n'|d}|j|} || z }t | |krnd||dz }|j dzdkr%|j dtjt ||k|jdkrdnd}|t#||d|jd fd S) Nrrrr3rrrA)rAr)fdr bytearraystatexsizeysizerrmaxr rrrosSEEK_CURr set_as_rawr)rrrle4datarY dest_lengthpixelsbyte num_pixels first_pixel second_pixelindex bytes_readrightup byte_count byte_readrawmodes r"decodezBmpRleDecoder.decodeGsfw"""y|{{ j&)99 $ii+%%W\\!__F7<<??D  J4 5z>DJ$444!$Q (81(> K/DD L0DD 1 D:--DZ7a<<d))dj&66!;;d))dj&66!;;AA!W\\!W\\!%aJ:** *IE2GurDJ4D/D'DEEDD DJ$44AA +%)!W\ %)W\\*%=%= )399I ByA~$6$66D By4'7$8$88DD9&*!W %)W\\*%=%=  *:33aLAw||~~)Q.. Q 444u$ii+%%vc))##s d Wq$)B-.@AAAur$N)rrrr)rrr _pulls_fdrrVr$r"rrDs3ICCCCCCr$rceZdZdZdZddZdS) DibImageFileDIBr1rr?c.|dS)N)r)rs r"rzDibImageFile._opens r$Nr)rrrrrrrVr$r"rrs3 F)r$r)rrr3)rr)rrr)rrr)r{rr)rrrrrzim Image.Imager IO[bytes]filename str | bytesr?c*t|||ddS)NF)_save)rrrs r" _dib_savers "b(E"""""r$T bitmap_headerc   t|j\}}}n-#t$r }d|jd}t||d}~wwxYw|j} | dd} t d| D} |jd|zdzdzd zd z} d } | |jd z}|jd kr dddD}ns|jdkr-ddtdD}n;|jdkr.|j dd}t|dz}nd}|rld| z|dzz}||z}|dkrd}t||dt|ztdzt|z|t| t|jdzt|jd zt!d zt!|ztdzt|zt| dzt| d zt|zt|z|d| d z z|r||t#j||t#jdd|jzd|| dfgdS) Nzcannot write mode z as BMPr[)`rc3@K|]}t|dzdzVdS)rUg?N)r=rWs r"rZz_save..s3441AK#%&&444444r$rrKrr4rr'rrr$c3@K|]}t|dzdzVdSr4rNr rXis r"rZz_save..s1AA12a5519w.AAAAAAr$rrc3@K|]}t|dzdzVdSrr rs r"rZz_save..s1CC12a5519w.CCCCCCr$rrrrrrelz)File size is too large for the BMP formatrrrgrrA)SAVErKeyErrorr encoderinforrsizejoinrr getpaletter ValueErrorwriteo32o16rrr)rrrrrrHrSerrr[ppmstrider<imagerr> file_sizes r"rrs:" $RW vv """327333cll!" >D ((5( # #C 44444 4 4CwqzD 1$*Q.2 6F F RWQZ E w#~~((AAAAAAA C((CCc CCCCC C%""5&11W"  fvz)UN y =CS// !  )nn !ff &kk    HH F bgaj//  bgaj//  a&&  d))   a&&   e**   c!f++  c!f++  f++  f++    HHUfrk "###  O B(8!gvr=RSSTs A>Az.bmpz image/bmprz.dib)rrrr)rrrrrrrr?)T) rrrrrrrrrr?)% __future__rrtypingrrrfrrr _binaryr rr r-r rrrrrrr#r.r0 PyDecoderrrrrr register_openr register_saveregister_extension register_mimeregister_decoderrVr$r"rs2#""""" ,,,,,,,,,,!!!!!!!!!!!!!!!!!!!!!!!!   $$$$9999@$@$@$@$@$9&@$@$@$FFFFFFI'FFFX<      #### RVBBBBBTL'w???L'///,f555L'555y-000L'{CCCL'333,f555L'55555r$