
    ^j+              
         d dl mZ d dlZd dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZmZmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z/ d d	l-m0Z1 d d
l-m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? d+dZ@ e@            ZAeAs eBd          d,dZCd-dZDefd.dZEefd/d!ZF G d" d#e          ZGd0d%ZHeeeeeeeeed&	ZI G d' d(e          ZJd1d*ZKdS )2    )annotationsN)byrefmemmove)BinaryIOSequence)	ImageData)ImageDecodeExceptionImageDecoderImageEncoder)CLSID_WICImagingFactory1CLSID_WICImagingFactory2GUID_ContainerFormatBmpGUID_ContainerFormatJpegGUID_ContainerFormatPngGUID_ContainerFormatTiffGUID_ContainerFormatWmpGUID_WICPixelFormat24bppBGRGUID_WICPixelFormat32bppBGRAIID_IWICImagingFactory1IID_IWICImagingFactory2IPropertyBag2
IWICBitmapIWICBitmapDecoderIWICBitmapEncoderIWICBitmapFlipRotatorIWICBitmapFrameDecodeIWICBitmapFrameEncodeIWICFormatConverterIWICImagingFactoryIWICImagingFactory2IWICMetadataQueryReader
IWICStreamWICBitmapCacheOnDemandWICBitmapDitherTypeNoneWICBitmapEncoderNoCacheWICBitmapPaletteTypeCustomWICBitmapTransformFlipVerticalWICDecodeMetadataCacheOnDemand)	_kernel32)_ole32)com)CLSCTX_INPROC_SERVERGENERIC_WRITEGMEM_MOVEABLESTREAM_SEEK_SET)BOOLBYTEPROPVARIANTSTATSTGUINTULONGIStreamreturn/IWICImagingFactory2 | IWICImagingFactory | Nonec            	     Z   	 t                      } t          j        t          dt          t
          t          |                      | S # t          $ r Y nw xY w	 t                      } t          j        t          dt          t          t          |                      | S # t          $ r Y nw xY wdS )z{Get a WIC Factory.

    Factory 2 should be available since Windows 7 with a Platform Update, but be on the safe side.
    N)r    ole32CoCreateInstancer   r,   r   r   OSErrorr   r   r   )factorys    R/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/image/codecs/wic.py_create_factoryr?   4   s    
	%''7#36$W~~		/ 	/ 	/
    	$&&7#36$W~~		/ 	/ 	/
     4s%   AA 
AAAB 
B('B(zCould not create WIC factory.(IWICImagingFactory2 | IWICImagingFactoryc                     t           S )zvRetrieve the current WIC factory.

    WIC interfaces with many other libraries such as DirectWrite and Direct2D.
    )_factory     r>   get_factoryrE   U   s	    
 OrD   bitmap_decoderr   frame_indexintr   c                h    t                      }|                     |t          |                     |S N)r   GetFramer   )rF   rG   bitmaps      r>   _get_bitmap_framerM   \   s.    "$$FKv777MrD   widthheight
target_fmtcom.GUIDr   c           	         t                      }t                              | ||t          t	          |                     |S )zRCreate a WIC Bitmap.

    Caller is responsible for releasing ``IWICBitmap``.
    )r   rB   CreateBitmapr#   r   )rN   rO   rP   rL   s       r>   
get_bitmaprT   a   s?    
 \\F% ,Fmm% % % MrD   rL   r   c                   t                      }t                      }|                     t          |          t          |                     t          |j                  }t          |j                  }t          j        ddddddddddd          }|                     t          |                     d}||k    rt                      }t          
                    t          |                     t                      }|                    ||t          |                     |s	t          }d}|                    | |t          ddt                      |                                  |} t%                      }t                              t          |                     |                    | t(                     t+          |          |z  }	|	|z  }
t-          |
z              }|                    d|	|
t          |                     |                                 |                                  t1          ||||          S )zExtra image data from IWICBitmap into ImageData, specifying target format.

    .. note:: ``bitmap`` is released before this function returns.
    r   BGRABGRN)r4   GetSizer   rH   valuer+   GUIDGetPixelFormatr   rB   CreateFormatConverterr0   
CanConvertr   
Initializer$   r&   Releaser   CreateBitmapFlipRotatorr'   lenr1   
CopyPixelsr   )rL   rP   rN   rO   pffmt	converterconversion_possibleflipperstridebuffer_sizebuffers               r>   extract_image_datark   n   s   
 FFEVVF
NN5<<v///EF 
!Q1aAq!Q	2	2B
%))$$$
C	Z'))	&&uY'7'7888"ffRU3F-G-GHHH # 	4JCVZ1H$PQSmnnn $%%G$$U7^^444v=>>>XXF6/K[ ##FtV[%--@@@OO
NNUFC000rD   c                  V     e Zd ZdZd fdZddZdddZddZedd            Z	 xZ
S )
WICDecoderzWindows Imaging Component implementation for image decoding.

    This decoder is a replacement for GDI/GDI+ starting with Windows 7.
    r7   Nonec                |    t          t          |                                            t                      | _        d S rJ   )superr
   __init__rE   rB   )self	__class__s    r>   rq   zWICDecoder.__init__   s.    lD!!**,,,#rD   Sequence[str]c                
    g dS )N)
.bmp.jpg.jpeg.png.tif.tiffz.ico.jxrz.hdp.wdprC   rr   s    r>   get_file_extensionszWICDecoder.get_file_extensions   s    aaaarD   NfilenamestrfileBinaryIO | None!tuple[IWICBitmapDecoder, IStream]c                D   |                                 }t          j        t          t	          |                    }t          j        |          }t          ||t	          |                     t          j        |           t                      }t          j
        |dt          |                     t                      }| j                            |d t          t          |                    }|dk    r(|                                 t#          d|p|z            ||fS )NTr   zWIC cannot load %r)readkernel32GlobalAllocr.   ra   
GlobalLockr   GlobalUnlockr6   r:   CreateStreamOnHGlobalr   r   rB   CreateDecoderFromStreamr(   r_   r	   )	rr   r   r   datahglobptrstreamdecoderstatuss	            r>   _load_bitmap_decoderzWICDecoder._load_bitmap_decoder   s    yy{{ $]CII>>!%((T3t99%%%e$$$ #E4v??? $%%66vtEcejkresesttQ;;NN&';x?O4'PQQQrD   r   c                   |sat          |d          5 }|                     ||          \  }}t          |d          }t          |          }d d d            n# 1 swxY w Y   n8|                     ||          \  }}t          |d          }t          |          }|                                 |                                 |S )Nrbr   )openr   rM   rk   r_   )rr   r   r   frF   r   rL   
image_datas           r>   decodezWICDecoder.decode   s    	4h%% 8)-)B)B8Q)O)O&*>1==/77
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
 &*%>%>x%N%N"NF&~q99F+F33J   s   9AAAreaderr!   metadata_namerH   c                    	 t                      }|                     |t          |                     |j        }t	          j        t          |                     n# t          $ r d}Y nw xY w|S )zUses a metadata name and reader to return a single value.

        Can be used to get metadata from images.

        Handles cleanup of PROPVARIANT.

        Returns:
            0 on failure.
        r   )r2   GetMetadataByNamer   llValr:   PropVariantClearr<   )r   r   proprY   s       r>   get_property_valuezWICDecoder.get_property_value   sx    	==D$$]E$KK@@@JE"5;;//// 	 	 	EEE	 s   AA A+*A+)r7   rn   r7   rt   rJ   )r   r   r   r   r7   r   )r   r   r   r   r7   r   )r   r!   r   r   r7   rH   )__name__
__module____qualname____doc__rq   r   r   r   staticmethodr   __classcell__)rs   s   @r>   rm   rm      s         & & & & & &b b b b    ,       \    rD   rm   Sequence[ImageDecoder]c                      t                      gS rJ   )rm   rC   rD   r>   get_decodersr          LL>rD   )	rv   rw   rx   rz   r{   z.wmpr|   r}   ry   c                      e Zd ZddZddZdS )
WICEncoderr7   rt   c                *    t          t                    S rJ   )listextension_to_containerr~   s    r>   r   zWICEncoder.get_file_extensions   s    *+++rD   imager   r   r   r   r   rn   c                ,   |                                 }t                      }t                      }t                      }t	                      }|r%t
          j                            |          d         pd}t          	                    |t                    }	t                              t          |                     |	t          k    r
d}
t          }n+t!          |j                  dk    r
d}
t          }n	d}
t$          }|j        t!          |
          z  }|                    |
|           }||j        z  }|rGt-                      }t/          j        d dt          |                     |                    |           nd }|                    |t6                     t                              |	d t          |                     |                    |t<                     |                    t          |          t          |                     |                    |           |                     |j        |j                   |!                    t          |                     tD          |z  #                    tI          |                    }|%                    |j        |||           |&                                 |&                                 |r|rtO                      }|(                    t          |          d           |j)        }|*                    dtV          d            tE          |z              }tY                      }|-                    t          |          |t          |                     |j.        |k    r|/                    |           nta          d|            |1                                 |1                                 |1                                 |1                                 |1                                 d S )	N   ry   rW      rV   Tr   z>Failed to read all of the data from stream attempting to save )2get_image_datar"   r   r   r   ospathsplitextr   getr   rB   CreateStreamr   r   r   ra   formatr   rN   get_datarO   r6   r:   r   InitializeFromIStreamInitializeFromFilenamer-   CreateEncoderr^   r%   CreateNewFrameSetSizeSetPixelFormatr1   from_buffer	bytearrayWritePixelsCommitr3   StatcbSizeSeekr/   r5   ReadrY   writeprintr_   )rr   r   r   r   	wicstreamencoderframeproperty_bagext	containerrd   default_formatpitchr   sizeistreamr   stsstream_sizebufwrittens                        r>   encodezWICEncoder.encode  sz   $$&&LL	#%%%''$9BG,,X66q9Df +..s4KLL	eI..///000C8NN 5<  A%%!<!=c#hh&^^C%00
u|# 	FiiG'dE'NNCCC++G4444G,,X}EEEy$g???9&=>>>uU||U<-@-@AAA&&&ek5<000U>22333t((:)>)>??%,tT::: 	G 	))CLLsQ'''*KLLOT222+%((CggGLLs[%..AAA}++

3]W[]]^^^OOrD   Nr   )r   r   r   r   r   r   r7   rn   )r   r   r   r   r   rC   rD   r>   r   r      sB        , , , ,R R R R R RrD   r   Sequence[ImageEncoder]c                      t                      gS rJ   )r   rC   rD   r>   get_encodersr   X  r   rD   )r7   r8   )r7   r@   )rF   r   rG   rH   r7   r   )rN   rH   rO   rH   rP   rQ   r7   r   )rL   r   rP   rQ   r7   r   )r7   r   )r7   r   )L
__future__r   r   ctypesr   r   typingr   r   pyglet.imager   pyglet.image.codecsr	   r
   r    pyglet.image.codecs.wincodec_libr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   pyglet.libs.win32r)   r   r*   r:   r+   pyglet.libs.win32.constantsr,   r-   r.   r/   pyglet.libs.win32.typesr0   r1   r2   r3   r4   r5   r6   r?   rB   ImportErrorrE   rM   rT   rk   rm   r   r   r   r   rC   rD   r>   <module>r      s   " " " " " " 				 ! ! ! ! ! ! ! ! % % % % % % % % " " " " " " P P P P P P P P P P                                                             > 4 3 3 3 3 3 - - - - - - ! ! ! ! ! !            [ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z   : ? 7
+5
6
66      
 >Z 
 
 
 
 
 C_ 61 61 61 61 61rD D D D D D D DN   
 $$%$%####
 
 V V V V V V V Vr     rD   