a
    ¥Q•hv%  ã                   @   s¶  d Z ddlZddlmZ ddlmZmZmZ ddlm	Z
 dZdZdZd	Zd
ZdZdZdZdZd
ZdZdZdZdZdZdZdZdZdZdZdZdZ d	Z!dZ"dZ#dZ$e!Z%e#Z&e#eB Z'e$Z(e$eB Z)e Z*e"Z+eeB eB eB Z,eZ-eZ.eZ/eZ0eZ1eZ2eZ3eeB Z4eZ5eeB Z6eeB Z7eeB Z8eeB Z9eeB Z:eeB Z;dZ<dZ=dZ>dZ?dZ@dZAdZBd ZCd!ZDd"ZEd#ZFd$ZGd%ZHd&ZIG d'd(„ d(ejƒZJd)d*„ ZKd+d,„ ZLe MeJjNeJeL¡ e OeJjNeK¡ e PeJjNd-¡ dS ).aŠ  
A Pillow loader for .dds files (S3TC-compressed aka DXTC)
Jerome Leclanche <jerome@leclan.ch>

Documentation:
  https://web.archive.org/web/20170802060935/http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt

The contents of this file are hereby released in the public domain (CC0)
Full text of the CC0 license:
  https://creativecommons.org/publicdomain/zero/1.0/
é    N)ÚBytesIOé   )ÚImageÚ	ImageFileÚImagePalette)Úo32leiDDS é   é   é   i   i   i   i  € i  @ i   é   i   i    i @  i €  i    é    é@   iDXT1iDXT3iDXT5é   é   é   éR   éS   éT   é_   é`   éa   éb   éc   c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚDdsImageFileZDDSzDirectDraw Surfacec                 C   sD  t | j d¡ƒsd}t|ƒ‚t d| j d¡¡\}|dkrPdt|ƒ› �}t|ƒ‚| j |d ¡}t|ƒdkr„dt|ƒ› d�}t|ƒ‚t	|ƒ}t d	| d
¡¡\}}}||f| _
d| _t d	| d
¡¡\}}	}
t d| d¡¡ t d| d¡¡\}}| d¡}t d| d¡¡\}t d| d¡¡}|t@ �rh|t@ �r@d| _nd| _dd| j d| jddffg| _�nØ|t@ �rìdd„ t|ƒD ƒ}d}|t@ �r ||d 7 }nd| _||d |d  |d  7 }dd| j d|d d d … ddffg| _�nT|t@ �r,d!| _t d| j d"¡¡| _dd| j ddfg| _�n|d }d}|d#k�rPd$| _d}�nÔ|d%k�rhd&| _d'}�n¼|d(k�r€d)| _d*}�n¤|d+k�ržd,| _d}d| _�n†|d-v �r¼d.| _d/}d| _�nh|d0k�rÚd1| _d/}d| _�nJ|d2k�r|d37 }t d| j d¡¡\}| j d¡ |ttfv �r.d.| _d/}d| _nÞ|tk�rJd1| _d/}d| _nÂ|tk�rfd4| _d5}d| _n¦|tk�r‚d6| _d5}d| _nŠ|ttfv �rœd7| _d8}np|tk�r¼d7| _d9| j d:< d8}nP|t!t"t#fv �rúdd| j dd;fg| _|t#k�röd9| j d:< d S d<|› �}t$|ƒ‚nd=t|ƒ› �}t$|ƒ‚d>d| j ||| jffg| _d S )?Nr	   znot a DDS filez<Ié|   zUnsupported header size éx   zIncomplete header: z bytesz<3Ié   ÚRGBAz<11Ié,   z<2Ir
   z<4Ié   ÚLAÚLÚraw©r   r   r   r   c                 S   s   i | ]\}}|g d ¢| “qS ))ÚRÚGÚBÚA© )Ú.0ÚiÚmaskr(   r(   úK/var/www/sistema_ama/venv/lib/python3.9/site-packages/PIL/DdsImagePlugin.pyÚ
<dictcomp>—   ó    z&DdsImageFile._open.<locals>.<dictcomp>Ú ì      ~ ÚRGBé  ÿ é ÿ  éÿ   éÿÿÿÿÚPr   s   DXT1ÚDXT1s   DXT3ÚDXT3r   s   DXT5ÚDXT5é   s   ATI1ZBC4)s   ATI2s   BC5UZBC5é   s   BC5SZBC5Ss   DX10é   ZBC6Hé   ZBC6HSZBC7é   g]tÑEÝ?Úgamma)r   r   r   zUnimplemented DXGI format zUnimplemented pixel format Zbcn)%Ú_acceptÚfpÚreadÚSyntaxErrorÚstructÚunpackÚreprÚOSErrorÚlenr   Ú_sizeÚ_modeÚDDPF_LUMINANCEÚDDPF_ALPHAPIXELSÚsizeÚmodeÚtileÚDDPF_RGBÚ	enumerateÚDDPF_PALETTEINDEXED8r   r"   ÚpaletteZpixel_formatÚDXGI_FORMAT_BC5_TYPELESSÚDXGI_FORMAT_BC5_UNORMÚDXGI_FORMAT_BC5_SNORMÚDXGI_FORMAT_BC6H_UF16ÚDXGI_FORMAT_BC6H_SF16ÚDXGI_FORMAT_BC7_TYPELESSÚDXGI_FORMAT_BC7_UNORMÚDXGI_FORMAT_BC7_UNORM_SRGBÚinfoÚDXGI_FORMAT_R8G8B8A8_TYPELESSÚDXGI_FORMAT_R8G8B8A8_UNORMÚDXGI_FORMAT_R8G8B8A8_UNORM_SRGBÚNotImplementedError)ÚselfÚmsgÚheader_sizeÚheader_bytesÚheaderÚflagsÚheightÚwidthÚpitchÚdepthZmipmapsZpfsizeZpfflagsZfourccÚbitcountÚmasksÚrawmodeÚ
data_startÚnZdxgi_formatr(   r(   r,   Ú_opens   sÎ    



"

*















ý



ÿzDdsImageFile._openc                 C   s   d S ©Nr(   )ra   Úposr(   r(   r,   Ú	load_seekì   s    zDdsImageFile.load_seekN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrp   rs   r(   r(   r(   r,   r   o   s   yr   c              
   C   s¸  | j dvr d| j › d�}t|ƒ‚| j }g d¢}| j dv r>t}nt}|d d d… }| j dv rl|tO }| d¡ t|ƒd	 }t|ƒd
k r�| d¡ qx| tt	ƒtdƒ tt
tB tB tB tB ƒ t| jƒ t| jƒ t| j| d d	 ƒ tdƒ tdƒ tdƒd  tdƒ t|ƒ tdƒ t|ƒ d dd„ |D ƒ¡ ttƒ tdƒ tdƒ tdƒ tdƒ ¡ | j dk�r�|  ¡ \}}	}
}t d|||	|
f¡} t | |dd| j d|ddffg¡ d S )N)r1   r   r!   r    zcannot write mode z as DDS)r2   r3   r4   )r!   r    r5   )r    r   r0   r
   r	   r   r   r>   é   r   r.   c                 s   s   | ]}t |ƒV  qd S rq   )Úo32)r)   r+   r(   r(   r,   Ú	<genexpr>  r.   z_save.<locals>.<genexpr>r   r"   r#   r   )rN   rG   rK   rP   rL   ÚappendrH   Úwriterz   Ú	DDS_MAGICÚ	DDSD_CAPSÚDDSD_HEIGHTÚ
DDSD_WIDTHÚ
DDSD_PITCHÚDDSD_PIXELFORMATrg   rh   ÚjoinÚDDSCAPS_TEXTUREÚsplitr   Úmerger   Ú_saverM   )ÚimrA   Úfilenamerb   rm   rl   Zpixel_flagsrk   ÚrÚgÚbÚar(   r(   r,   rˆ   ð   sx    



ÿÿþûúùø	÷

öõôóòñðïîíìÿrˆ   c                 C   s   | d d… dkS )Nr	   s   DDS r(   )Úprefixr(   r(   r,   r@   !  s    r@   z.dds)QÚ__doc__rD   Úior   r/   r   r   r   Ú_binaryr   rz   r~   r   r€   r�   r‚   rƒ   ZDDSD_MIPMAPCOUNTZDDSD_LINEARSIZEZ
DDSD_DEPTHZDDSCAPS_COMPLEXr…   ZDDSCAPS_MIPMAPZDDSCAPS2_CUBEMAPZDDSCAPS2_CUBEMAP_POSITIVEXZDDSCAPS2_CUBEMAP_NEGATIVEXZDDSCAPS2_CUBEMAP_POSITIVEYZDDSCAPS2_CUBEMAP_NEGATIVEYZDDSCAPS2_CUBEMAP_POSITIVEZZDDSCAPS2_CUBEMAP_NEGATIVEZZDDSCAPS2_VOLUMErL   Z
DDPF_ALPHAZDDPF_FOURCCrR   rP   rK   Z
DDS_FOURCCZDDS_RGBZDDS_RGBAZDDS_LUMINANCEZDDS_LUMINANCEAZ	DDS_ALPHAZDDS_PAL8ZDDS_HEADER_FLAGS_TEXTUREZDDS_HEADER_FLAGS_MIPMAPZDDS_HEADER_FLAGS_VOLUMEZDDS_HEADER_FLAGS_PITCHZDDS_HEADER_FLAGS_LINEARSIZEZ
DDS_HEIGHTZ	DDS_WIDTHZDDS_SURFACE_FLAGS_TEXTUREZDDS_SURFACE_FLAGS_MIPMAPZDDS_SURFACE_FLAGS_CUBEMAPZDDS_CUBEMAP_POSITIVEXZDDS_CUBEMAP_NEGATIVEXZDDS_CUBEMAP_POSITIVEYZDDS_CUBEMAP_NEGATIVEYZDDS_CUBEMAP_POSITIVEZZDDS_CUBEMAP_NEGATIVEZZDXT1_FOURCCZDXT3_FOURCCZDXT5_FOURCCr]   r^   r_   rT   rU   rV   rW   rX   rY   rZ   r[   r   rˆ   r@   Úregister_openrw   Úregister_saveÚregister_extensionr(   r(   r(   r,   Ú<module>   s”    1