B .^8@sddlmZmZmZddlmZmZmZ m Z m Z m Zddddddd Zd d Zd d ZGdddejZGdddeZddddddZddZd!ddZeejeeeejeeejdeejdeejeeeejeeejdeejdd S)")Image ImageFile ImagePalette)i8i16lei32leo8o16leo32le)PzP;1)r zP;4)r r )RGBzBGR;15)r BGR)r BGRX)r cCs|dddkS)NsBM)prefixrr6/tmp/pip-install-mwhup7aw/Pillow/PIL/BmpImagePlugin.py_accept-srcCst|dddkS)Nr) (@l|)i32)rrrr _dib_accept1src@s\eZdZdZdZdZdddddd d ZxeD]\ZZ e e e<q0Wdd d Z d dZ dS) BmpImageFilez2 Image plugin for the Windows Bitmap format (BMP) zWindows BitmapZBMPrrr)RAWZRLE8ZRLE4 BITFIELDSZJPEGZPNGc Cs|jj|jj}}|r||i}t|d|d<d|d<t|j|dd}|ddkrt|dd|d<t|dd|d <t|dd |d <t|d d |d <|j|d<d|d<n|ddkrt|ddk|d<|drdnd|d<t|dd|d<|ds&t|dd ndt|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'<xd*D]}t|d||<q\W|d$|d%|d&f|d+<|d$|d%|d&|d'f|d,<ntd-|d|d|d f|_|ddr|dn d|d >|d<|d|d d.krtd/|jt|d d0\|_} |jd1krPtd2|d |d|j kr>d3d4d5d6d7gd8gd9d:gd;} dd?d?d@dAdBdC} |d | kr4|d dkr|d,| |d kr| |d |d,f} dD| krd>n|j|_nB|d dEkr*|d+| |d kr*| |d |d+f} ntdFntdFnD|d|jkrr|d dkr|dGkrdH\} |_ntdI|d|jdJkrd|dkrdKksntdL|dn|d} || |d} dM}|ddkrdNntt|d}xDt |D]8\}}| || || d}|t|dkrdO}qW|rh|ddkrZdPndQ|_|j} n"dJ|_t| dkrdssz'BmpImageFile._bitmap..dpi4r_maskg_maskb_maskZa_mask$r)r9r:r;Zrgb_maskZ rgba_maskz Unsupported BMP header type (%d)lzUnsupported BMP Size: (%dx%d))NNNz Unsupported BMP pixel depth (%d))iir.r!)iir.l~)r.iil~)r!r!r!r!)l~iir!)iir.)ii)i|ir=)rrrrZXBGRRGBABGRAr zBGR;16zBGR;15))r)iir.r!)r)l~iir!)r)r.iil~)r)iir.l~)r)r!r!r!r!)r)iir.)r)iir=)r)i|ir=A)rrz Unsupported BMP bitfields layout)r?r>z Unsupported BMP compression (%d)r iz!Unsupported BMP Palette size (%d)T)r!r.F1Lrawr=)fpreadseekrr _safe_readi16r$rtupleinfor%len enumerateOSError_sizegetsizeBIT2MODEmodelistrangerrrDpalettetellZtile)selfheaderoffsetrGrH file_infoZ header_dataidxmaskZraw_modeZ SUPPORTEDZ MASK_MODESpaddingrWZ greyscaleindicesindvalZrgbrrr_bitmapDs   ,         zBmpImageFile._bitmapcCsD|jd}|dddkr$tdt|dd}|j|ddS) z/ Open file, check magic number and read header r!rsBMzNot a BMP filer/)r[N)rFrG SyntaxErrorrrc)rYZ head_datar[rrr_opens  zBmpImageFile._openN)r!r!) __name__ __module__ __qualname____doc__format_descriptionformatZ COMPRESSIONSitemskvvarsrcrfrrrrr 8s Br c@seZdZdZdZddZdS) DibImageFileZDIBzWindows BitmapcCs |dS)N)rc)rYrrrrfszDibImageFile._openN)rgrhrirlrkrfrrrrrqsrq)rBrr)rCr)r rrr)r rr!)r?rr!)rBrCr r r>cCst|||ddS)NF)_save)imrFfilenamerrr _dib_save,srvTc Cs yt|j\}}}Wn"tk r6td|jYnX|j}|dd}ttdd|} |jd|ddd d @} d } | |jd } |rd | |d} | | }|dkrt d| dt |t dt | | t | t |jdt |jd t d t |t dt | t | dt | d t |t || d| d |jdkrxvdD]}| t |dqpWnT|jdkrxFtdD]}| t |dqWn |jdkr| |jddt||dd|jd|| dffgdS)Nzcannot write mode %s as BMPr7)`rwcSst|ddS)Ngo_C@g?)r3)r5rrr;z_save..r!r-rr"rErrrdrlz)File size is too large for the BMP formatsBMrB)r!r.rCrrr r rrD)r!r!r&)SAVErTKeyErrorrOZ encoderinforQrKmaprR ValueErrorwriteo32o16rrVrtZ getpaletterrs)rtrFruZ bitmap_headerrawmoder+r2rLr7ppmZstriderZimager[ file_sizeirrrrs0s:  n    rsz.bmpz image/bmpz.dibN)T)rrr_binaryrrrJrrrr rr rrSrrr rqr{rvrsZ register_openrlZ register_saveZregister_extensionZ register_mimerrrrs6 ^ @