
    ^j)                        d Z ddlZddlmZmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZ ej        ZdZdZdZd	Z G d
 dej                  Z G d dej                  Zedz  Z G d dej                  Z G d dej                  Z G d dej                  Zd Zd Z G d de
          Zd Zd Zd Zd Z d Z!d Z"d Z#d  Z$d! Z%dS )"zDecoder for BMP files.

Currently supports version 3 and 4 bitmaps with BI_RGB and BI_BITFIELDS
encoding.  Alpha channel is supported for 32-bit BI_RGB only.
    N)DWORDLONGWORD)	ImageData)ImageDecodeExceptionImageDecoder)BYTE         c                   4    e Zd ZdZdefdefdefdefdefgZdS )BITMAPFILEHEADERr
   bfTypebfSizebfReserved1bfReserved2	bfOffBitsN)__name__
__module____qualname___pack_r   r   _fields_     R/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/image/codecs/bmp.pyr   r      sB        F	4	5			eHHHr   r   c                   X    e Zd ZdZdefdefdefdefdefdefdefd	efd
efdefdefgZdS )BITMAPINFOHEADERr
   biSizebiWidthbiHeightbiPlanes
biBitCountbiCompressionbiSizeImagebiXPelsPerMeterbiYPelsPerMeter	biClrUsedbiClrImportantN)r   r   r   r   r   r   r   r   r   r   r   r   r   %   sr        F	5	D	T	T	t	% 		D!	D!	e	5!HHHr   r   	   c                       e Zd ZdZdefdefdefdefdefdefdefd	efd
efdefdefdefdefdefdefdefdefdefdefdefgZdS )BITMAPV4HEADERr
   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   
bV4RedMaskbV4GreenMaskbV4BlueMaskbV4AlphaMask	bV4CSTypebV4EndpointsbV4GammaRedbV4GammaGreenbV4GammaBlueN)	r   r   r   r   r   r   r   CIEXYZTRIPLEr   r   r   r   r+   r+   7   s        F	5	D	T	T	t	% 		D!	D!	e	5!	u				e	&		% 	)HHHr   r+   c                   (    e Zd ZdZdefdefdefgZdS )	RGBFieldsr
   redgreenblueN)r   r   r   r   r   r   r   r   r   r7   r7   P   s0        F		%	HHHr   r7   c                   4    e Zd ZdZdefdefdefdefgZd ZdS )RGBQUADr
   rgbBluergbGreenrgbRedrgbReservedc                 0    d| j         | j        | j        fz  S )Nz<%d, %d, %d>)r?   r>   r=   selfs    r   __repr__zRGBQUAD.__repr__b   s    dmT\ JJJr   N)r   r   r   r   r	   r   rD   r   r   r   r<   r<   Y   sT        F	D	T	4		HK K K K Kr   r<   c                     t          j        | j                  |z   }t          j        t	          | j                                      |                    S N)ctypes	addressofcontentspointertypefrom_address)ptroffsetaddresss      r   ptr_addrP   e   sA    s|,,v5G>$s|,,99'BBCCCr   c                    |t          j        |          z   t          |           k    rt          d          t	          t          j        |           |          }t          j        |t          j        |                    j        S )NzBMP file is truncated)	rG   sizeoflenr   rP   rJ   castPOINTERrI   )bufferrN   rK   rM   s       r   	to_ctypesrW   i   si    d###c&kk11"#:;;;
&.((&
1
1C;sFN40011::r   c                       e Zd Zd Zd ZdS )BMPImageDecoderc                     dgS )Nz.bmpr   rB   s    r   get_file_extensionsz#BMPImageDecoder.get_file_extensionsp   s	    xr   c           
      .   |st          |d          }|                                }t          j        |          }|d d         dk    rt	          d|p|z            t          |dt                    }|j        }t          j        t                    }t          ||t                    }||j
        z   }	|j
        t          j        t                    k     rt	          d|p|z            |j        }
|j        |
dk    s|j        dk    rt	          d|p|z            dk     rd	pd}t                    |j        }|t           t"          fvrt	          d
|p|z            d}|j        }|dk    r|
dz   dz  }t          j        t(          }n|dk    r|
dz   dz  }t          j        t*          }n|dk    rt          j        |
}t,          }n|dk    r|
dz  }t          j        t0          }n|dk    r|
dz  }t          j        t2          }ns|dk    rW|
dz  }|t           k    rt4          }t          j        nI|t"          k    rt0          }t          j        n*t	          d
|p|z            t	          d||p|fz            |dz   dz  }|t          j                  z  |dk     rW|t           k    rL|j        pd|z  }t          ||	t:          |z            }t          ||z  z            } ||||
||          S |dk    r2|t           k    r't          ||z  z            } ||d |
||          S |t"          k    r|j
        t          j        t<                    k    r,t          ||t<                    }|j        }|j         }|j!        }nG|t          j        t                    z   }t          ||tD                    }|j#        }|j$        }|j%        } G fddt          j&                  }t          |||          j'        } ||||||
||          S d S )Nrbr   s   BMzNot a Windows bitmap file: %rr   zUnsupported BMP type: %rr
   z#BMP file has corrupt parameters: %rzUnsupported compression: %r               r       zUnsupported bit count %d: %rc                   *    e Zd ZdZd z  z  fgZdS )*BMPImageDecoder.decode.<locals>._BitsArrayr
   dataN)r   r   r   r   r   )	bits_typeheightpacked_widths   r   
_BitsArrayrg      s-        Y5>?r   rl   )(openreadrG   c_bufferr   rW   r   r   rR   r   r   r   r    r!   absr#   BI_RGBBI_BITFIELDSr"   c_ubytedecode_1bitdecode_4bitdecode_8bitc_uint16decode_bitfieldsdecode_24bitdecode_32bit_rgbc_uint32r'   r<   r+   r,   r-   r.   r7   r8   r9   r:   LittleEndianStructurerh   )rC   filenamefilebytesrV   file_headerbits_offsetinfo_header_offsetinfo_headerpalette_offsetwidth
pitch_signcompressionclr_usedbitcountpitchdecoderpalettebitsr_maskg_maskb_maskfields_offsetfieldsrl   ri   rj   rk   s                            @@@r   decodezBMPImageDecoder.decodes   s    	($''D		''!9&/83CtDF F F  +;<<!+#]+;<<(:<LMM+k.@@.> ? ???&*h.>$?A A A #%A::+.!33&59ITJL L LaZ&B+!
V!/v|444&-1ATBD D D )q==QY1$EI!GG]]QY1$EI!GG]]IE!GG^^AIEI&GG^^AIEI"GG^^AIEf$$*"N		,,*"O		*1X5EFH H H '.(H<L1MMO O O b i 8 88b==[F22",@xH(8JKKGV[&5>@ @D74%
KKK^^v 5 5V[&,*?@B BD74ufeZHHHL((!V]>%B%BBB'0B(68 8$/$1$0 2M"233!4"6=)DD        V9   
 V[*==BD74 &%= = =) )(r   N)r   r   r   r[   r   r   r   r   rY   rY   o   s7          h= h= h= h= h=r   rY   c                 0   |dz  dz   dz  dz  }t          j        ||z  z              }d}| D ]U}	|	D ]P}
t          d          D ]>}||
dz  dz	           }|j        ||<   |j        ||dz   <   |j        ||dz   <   |dz  }|
dz  }
?QVt          ||d	|||z            S )
Nr   r_   ir   r`      r
   r   RGB)rG   rs   ranger?   r>   r=   r   )r   r   r   rj   r   r   	rgb_pitchrV   irowpacked_rgbs                r   rt   rt      s    A:"d*a/In 2366F	A   	 	F1XX  v}23Jq	 #q1u #q1uQ1	 UFE6:	3IJJJr   c                    |dz  dz   dz  dz  }t          j        ||z  z              }d}| D ]H}	|	D ]C}
|
dz  dz	  |
dz  fD ]3}||         }|j        ||<   |j        ||dz   <   |j        ||dz   <   |dz  }4DIt          ||d	|||z            S )
Nr
   r   r      ra      r   r   rG   rs   r?   r>   r=   r   )r   r   r   rj   r   r   r   rV   r   r   r   indexr   s                r   ru   ru      s    A:"d*a/In 2366F	A   	 	F!D=Q.=  enJq	 #q1u #q1uQ	 UFE6:	3IJJJr   c                     |dz  }t          j        ||z  z              }d}| D ]8}	|	D ]3}
||
         }|j        ||<   |j        ||dz   <   |j        ||dz   <   |dz  }49t          ||d|||z            S Nr   r   r
   r   r   r   )r   r   r   rj   r   r   r   rV   r   r   r   r   s               r   rv   rv      s    	In 2366F	A   	 	E%.C
F1ILF1q5MKF1q5MFAA	 UFE6:	3IJJJr   c                     t          j        ||z  z              }t          j        || t          |                     t	          ||d|||z            S )NBGRrG   rs   memmoverS   r   r   r   r   rj   r   r   rV   s          r   ry   ry     sM    n/22F
N64V---UFE6:3EFFFr   c                     t          j        ||z  z              }t          j        || t          |                     t	          ||d|||z            S )NBGRAr   r   s          r   rz   rz     sM    n/22F
N64V---UFFFJ4FGGGr   c                     | sdS d}d|z  | z  s|dz  }d|z  | z  d}| |z	  |z	  r|dz  }| |z	  |z	  |d|z
  z
  }|dk     rd| fS |dfS )Nr   r
   r`   r   )maskshiftshift_upss       r   	get_shiftr     s     q EEzT! 
 EzT!  H5=X
% A 5=X
%  	XA1uu1"u!tr   c                 ~   t          |          \  }}	t          |          \  }
}t          |          \  }}dt          | d                   z  }t          j        ||z  z              }d}| D ]<}|D ]7}||z  |z	  |	z  ||<   ||z  |
z	  |z  ||dz   <   ||z  |z	  |z  ||dz   <   |dz  }8=t	          ||d|||z            S r   )r   rS   rG   rs   r   )r   r   r   r   r   rj   r   r   r_shift1r_shift2g_shift1g_shift2b_shift1b_shift2r   rV   r   r   r   s                      r   rx   rx   )  s    "6**Hh"6**Hh"6**HhCQLL In 2366F	A   	 	F&X5AF1I!F?x78CF1Q3K!F?x78CF1Q3KFAA		 UFE6:	3IJJJr   c                       t                      gS rF   )rY   r   r   r   get_decodersr   <  s    r   c                      g S rF   r   r   r   r   get_encodersr   ?  s    Ir   )&__doc__rG   ctypes.wintypesr   r   r   pyglet.imager   pyglet.image.codecsr   r   pyglet.libs.win32.typesr	   r{   
FXPT2DOT30rq   BI_RLE8BI_RLE4rr   r|   r   r   r5   r+   r7   r<   rP   rW   rY   rt   ru   rv   ry   rz   r   rx   r   r   r   r   r   <module>r      sz     - - - - - - - - - - " " " " " " B B B B B B B B ( ( ( ( ( (_
	


    v3       v3     A~    V1   2    ,   
K 
K 
K 
K 
Kf* 
K 
K 
KD D D; ; ;l= l= l= l= l=l l= l= l=\K K K K K KK K KG G G
H H H
  (K K K&      r   