3 }\9@sddlmZmZmZddlmZmZmZ m Z m Z m ZdZd'd(d)d*d+d,d Zd d ZddZGdddejZGdddeZd-d.d/d0d1dZddZd2d!d"Zejejeeejejeejejd#ejejd$ejejeeejejeejejd%ejejd$d&S)3)Image ImageFile ImagePalette)i8i16lei32leo8o16leo32lez0.7PP;1P;4RGBBGR;15BGRBGRX)r cCs|dddkS)NsBM)prefixrrj/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-install-i584jbuk/Pillow/PIL/BmpImagePlugin.py_accept2srcCst|dddkS)Nr (@l|)rrrrr )i32)rrrr _dib_accept6sr"c@sLeZdZdZdZdZdddddd d Zd\ZZZ Z Z Z dd d Z d dZdS) BmpImageFilez2 Image plugin for the Windows Bitmap format (BMP) zWindows BitmapZBMPrrr)RAWRLE8RLE4 BITFIELDSJPEGPNGcCs|jj|jj}}|r||i}t|d|d<dL|d<tj|j|dd}|ddkrt|dd|d<t|dd|d <t|dd |d <t|d d |d <|j|d<d|d<n|ddMkrt|ddk|d<|drdndN|d<t|dd|d<|ds&t|dd ndOt|dd |d <t|d d|d <t|dd|d <t|dd|d<t|dd|d<t|ddt|ddf|d<t|dd|d <d|d<t d!d"|dD|j d#<|d|j krt |d$krNxlt d%d&d'd(gD].\}}t|d)|dd|d||<qWn(d|d(<xdPD]}t|d||<q\W|d%|d&|d'f|d*<|d%|d&|d'|d(f|d+<ntd,|d|d|d f|_|jd dr|d n d|d >|d <|d|d dQkrtd.|jtj|d dR\|_} |jd/krPtd0|d |d|j krLdSdTdUdVdWgdXgdYdZgd8} d\d9d^d:d`d;dbddjd?i} |d | krB|d dkr|d+| |d kr| |d |d+f} d@| krd;n|j|_nB|d dkkr8|d*| |d kr8| |d |d*f} ntdAntdAnD|d|jkr|d dkr|dBkrdl\} |_ntdC|d|jdDkrd|d kodEknstdF|d n|d} || |d } dG}|d dkrdmntt|d }xDt |D]8\}}| || || d}|t|dkrdH}qW|rx|d dkrjdIndJ|_|j} n"dD|_tj| dkrd9nd=| |_|d|j d<dKdd|d|d f|p|jj| |d|d d-d?dn@|dffg|_d/S)oz" Read relevant info about the BMP rZ header_sizer directionrr$rwidthheightZplanesrbits compressionr%Zpalette_paddingrrrr Zy_flipr rZ data_sizerZpixels_per_metercolorscss|]}t|ddVqdS)go_C@g?N)int).0xrrr {sz'BmpImageFile._bitmap..dpi4r_maskg_maskb_maskZa_mask$Zrgb_maskZ rgba_maskz Unsupported BMP header type (%d)zUnsupported BMP Size: (%dx%d)Nz Unsupported BMP pixel depth (%d)~|)rrrrZXBGRRGBABGRArzBGR;16zBGR;15Az Unsupported BMP bitfields layoutz Unsupported BMP compression (%d)r iz!Unsupported BMP Palette size (%d)TF1Lraw)rrrr rRl)r?r@rAl)NN)rDrEr4r$)rDrEr4rF)r4rErDrF)r$r$r$r$)rFrDrEr$)rDrEr4)rGrHrC)rIrJrCrDrEr4r$)rrSrFrDrEr$)rrTr4rErDrF)rrUrDrEr4rF)rrVr$r$r$r$)rrWrDrEr4)rrXrGrHrC)rrYrIrJrC)rrZ)rr)rLrK)r$r4)fpreadseekr!r _safe_readi16r'rtupleinfor*len enumerateIOError_sizegetsizeBIT2MODEmodelistrangerrrQpalettetellZtile)selfheaderoffsetr]r^ file_infoZ header_dataidxmaskZraw_modeZ SUPPORTEDZ MASK_MODESpaddingrmZ greyscaleindicesindvalZrgbrrr_bitmapOs   *             zBmpImageFile._bitmapcCsD|jjd}|dddkr$tdt|dd}|j|ddS) z/ Open file, check magic number and read header r$rsBMzNot a BMP filer5)rqN)r\r] SyntaxErrorr!ry)roZ head_datarqrrr_opens  zBmpImageFile._openN)r$rrr%rr&)r$r$)__name__ __module__ __qualname____doc__format_descriptionformatZ COMPRESSIONSr'r(r)r*r+r,ryr|rrrrr#=s 5r#c@seZdZdZdZddZdS) DibImageFileZDIBzWindows BitmapcCs |jdS)N)ry)rorrrr|szDibImageFile._openN)r}r~rrrr|rrrrrsrrOrrPrrr$rLr)rOrPr rrKcCst|||ddS)NF)_save)imr\filenamerrr _dib_save)srTcCsyt|j\}}}Wn"tk r6td|jYnX|j}|jdd}ttdd|} |jd|ddd d@} d } | |jd } |rd | |d } |j dt | | t dt | |j t | t |jdt |jd t d t |t dt | t | dt | d t |t ||j d| d |jdkrzxvdD]}|j t |d q\WnT|jdkrxFt dD]}|j t |d qWn |jdkr|j |jjddtj||dd|jd|| dffgdS)Nzcannot write mode %s as BMPr=`cSst|ddS)Ngo_C@g?)r9)r;rrr8sz_save..r$r3rr%rrrzrsBMrOr4rPrr rrrQ)rrr[)r$r4)r$r$rR)SAVErjKeyErrorreZ encoderinforgramaprhwriteo32o16rrlrZ getpaletterr)rr\rZ bitmap_headerrawmoder1r8rbr=ppmZstriderpimagerqirrrr-s:  b     rz.bmpz image/bmpz.dibN)r r )r r )r r )rr)rr)rr)rOrr)rPrr)r rr)rrr$)rLrr$)T)rrr_binaryrrr`rr!rr rr r __version__rirr"r#rrrrZ register_openrZ register_saveZregister_extensionZ register_mimerrrrs8 W 8