o
    Ñ­jB  ã                   @  s<  d Z ddlmZ ddlZddlZddl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 dd	lmZ dd
lmZ dZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZeje ZeD ]Zej dus€J ‚e!edej › �ej"ƒ qweD ]Z#e#j dus—J ‚e!ede#j › �e#j"ƒ qŽeD ]Z$e$j dus®J ‚e!ede$j › �e$j"ƒ q¥eD ]Z%e%j dusÅJ ‚e!ede%j › �e%j"ƒ q¼ej&Z'ej(Z)ej(ej*B Z+ej,Z-ej,ej*B Z.ej/Z0ej1Z2ej3ej4B ej5B ej6B Z7ej8Z9ej:Z;ej<Z=ej>Z?ej4Z@ej5ZAejBZCejDejEB ZFejDZGejHejIB ZJejHejKB ZLejHejMB ZNejHejOB ZPejHejQB ZRejHejSB ZTejUZVejWZXejYZZej[Z\ej]Z^ej_Z`ejaZbejcZdejeZfejgZhejiZjejkZlejmZnejoZpG dd„ dejƒZqG dd„ dejrƒZsd1d(d)„Ztd2d-d.„Zue veqjweqeu¡ e xd/es¡ e yeqjwet¡ e zeqjwd0¡ dS )3a†  
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/
é    )ÚannotationsN)ÚIntEnumÚIntFlag)ÚIOé   )ÚImageÚ	ImageFileÚImagePalette)Úi32le)Úo8)Úo32leiDDS c                   @  ó,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
ÚDDSDr   é   é   é   é   é   i   i  € N)Ú__name__Ú
__module__Ú__qualname__ÚCAPSÚHEIGHTÚWIDTHÚPITCHÚPIXELFORMATÚMIPMAPCOUNTÚ
LINEARSIZEÚDEPTH© r   r   úO/var/www/html/CropPilot/venv/lib/python3.10/site-packages/PIL/DdsImagePlugin.pyr      ó    r   c                   @  s   e Zd ZdZdZdZdS )ÚDDSCAPSr   r   i  @ N)r   r   r   ÚCOMPLEXÚTEXTUREÚMIPMAPr   r   r   r    r"   +   s    r"   c                   @  r   )
ÚDDSCAPS2i   é   i   r   i    i @  i €  i    N)r   r   r   ÚCUBEMAPÚCUBEMAP_POSITIVEXÚCUBEMAP_NEGATIVEXÚCUBEMAP_POSITIVEYÚCUBEMAP_NEGATIVEYÚCUBEMAP_POSITIVEZÚCUBEMAP_NEGATIVEZÚVOLUMEr   r   r   r    r&   1   r!   r&   c                   @  s$   e Zd ZdZdZdZdZdZdZdS )ÚDDPFr   r   r   é    é@   r   N)	r   r   r   ÚALPHAPIXELSÚALPHAÚFOURCCÚPALETTEINDEXED8ÚRGBÚ	LUMINANCEr   r   r   r    r0   =   s    r0   c                   @  sð  e 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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.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKZMdLZNdMZOdNZPdOZQdPZRdQZSdRZTdSZUdTZVdUZWdVZXdWZYdXZZdYZ[dZZ\d[Z]d\Z^d]Z_d^Z`d_Zad`ZbdaZcdbZddcZeddZfdeZgdfZhdgZidhZjdiZkdjZldkZmdlZndmZodnZpdoZqdpZrdqZsdrZtdsZudtZvduZwdvZxdwZydxZzdyZ{dzS ){ÚDXGI_FORMATr   r   r   é   r   é   é   é   r   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   r1   é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   r2   éA   éB   éC   éD   éE   éF   éG   éH   éI   éJ   éK   éL   éM   éN   éO   éP   éQ   éR   éS   éT   éU   éV   éW   éX   éY   éZ   é[   é\   é]   é^   é_   é`   éa   éb   éc   éd   ée   éf   ég   éh   éi   éj   ék   él   ém   én   éo   ép   éq   ér   és   é‚   éƒ   é„   é½   é¾   N)|r   r   r   ÚUNKNOWNÚR32G32B32A32_TYPELESSÚR32G32B32A32_FLOATÚR32G32B32A32_UINTÚR32G32B32A32_SINTÚR32G32B32_TYPELESSÚR32G32B32_FLOATÚR32G32B32_UINTÚR32G32B32_SINTÚR16G16B16A16_TYPELESSÚR16G16B16A16_FLOATÚR16G16B16A16_UNORMÚR16G16B16A16_UINTÚR16G16B16A16_SNORMÚR16G16B16A16_SINTÚR32G32_TYPELESSÚR32G32_FLOATÚR32G32_UINTÚR32G32_SINTÚR32G8X24_TYPELESSÚD32_FLOAT_S8X24_UINTÚR32_FLOAT_X8X24_TYPELESSÚX32_TYPELESS_G8X24_UINTÚR10G10B10A2_TYPELESSÚR10G10B10A2_UNORMÚR10G10B10A2_UINTÚR11G11B10_FLOATÚR8G8B8A8_TYPELESSÚR8G8B8A8_UNORMÚR8G8B8A8_UNORM_SRGBÚR8G8B8A8_UINTÚR8G8B8A8_SNORMÚR8G8B8A8_SINTÚR16G16_TYPELESSÚR16G16_FLOATÚR16G16_UNORMÚR16G16_UINTÚR16G16_SNORMÚR16G16_SINTÚR32_TYPELESSÚ	D32_FLOATÚ	R32_FLOATÚR32_UINTÚR32_SINTÚR24G8_TYPELESSÚD24_UNORM_S8_UINTÚR24_UNORM_X8_TYPELESSÚX24_TYPELESS_G8_UINTÚR8G8_TYPELESSÚ
R8G8_UNORMÚ	R8G8_UINTÚ
R8G8_SNORMÚ	R8G8_SINTÚR16_TYPELESSÚ	R16_FLOATÚ	D16_UNORMÚ	R16_UNORMÚR16_UINTÚ	R16_SNORMÚR16_SINTÚR8_TYPELESSÚR8_UNORMÚR8_UINTÚR8_SNORMÚR8_SINTÚA8_UNORMÚR1_UNORMÚR9G9B9E5_SHAREDEXPÚR8G8_B8G8_UNORMÚG8R8_G8B8_UNORMÚBC1_TYPELESSÚ	BC1_UNORMÚBC1_UNORM_SRGBÚBC2_TYPELESSÚ	BC2_UNORMÚBC2_UNORM_SRGBÚBC3_TYPELESSÚ	BC3_UNORMÚBC3_UNORM_SRGBÚBC4_TYPELESSÚ	BC4_UNORMÚ	BC4_SNORMÚBC5_TYPELESSÚ	BC5_UNORMÚ	BC5_SNORMÚB5G6R5_UNORMÚB5G5R5A1_UNORMÚB8G8R8A8_UNORMÚB8G8R8X8_UNORMÚR10G10B10_XR_BIAS_A2_UNORMÚB8G8R8A8_TYPELESSÚB8G8R8A8_UNORM_SRGBÚB8G8R8X8_TYPELESSÚB8G8R8X8_UNORM_SRGBÚBC6H_TYPELESSÚ	BC6H_UF16Ú	BC6H_SF16ÚBC7_TYPELESSÚ	BC7_UNORMÚBC7_UNORM_SRGBÚAYUVÚY410ÚY416ÚNV12ÚP010ÚP016Ú
OPAQUE_420ÚYUY2ÚY210ÚY216ÚNV11ÚAI44ÚIA44ÚP8ÚA8P8ÚB4G4R4A4_UNORMÚP208ÚV208ÚV408ÚSAMPLER_FEEDBACK_MIN_MIP_OPAQUEÚ'SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUEr   r   r   r    r9   G   sô    r9   c                   @  sp  e 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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.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9e:d8ƒZ;e:d9ƒZ<e:d:ƒZ=e:d;ƒZ>e:d<ƒZ?e:d=ƒZ@e:d>ƒZAe:d?ƒZBe:d@ƒZCe:dAƒZDe:dBƒZEe:dCƒZFe:dDƒZGe:dEƒZHe:dFƒZIe:dGƒZJe:dHƒZKdIS )JÚD3DFMTr   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   r1   rU   rV   rW   rX   r\   r]   rf   rg   rh   rp   rq   rr   rs   r2   rv   ry   rz   r|   r~   r€   r‚   rƒ   r…   r†   r‡   rˆ   r„   r—   r˜   r™   r¡   r¢   r£   r¤   r¥   r¦   ét   éu   év   éw   éÇ   s   UYVYs   RGBGs   YUY2s   GRGBs   DXT1s   DXT2s   DXT3s   DXT4s   DXT5s   DX10s   BC4Ss   BC4Us   BC5Ss   BC5Us   ATI1s   ATI2s   MET1N)Lr   r   r   r¬   ÚR8G8B8ÚA8R8G8B8ÚX8R8G8B8ÚR5G6B5ÚX1R5G5B5ÚA1R5G5B5ÚA4R4G4B4ÚR3G3B2ÚA8ÚA8R3G3B2ÚX4R4G4B4ÚA2B10G10R10ÚA8B8G8R8ÚX8B8G8R8ÚG16R16ÚA2R10G10B10ÚA16B16G16R16r  r  ÚL8ÚA8L8ÚA4L4ÚV8U8ÚL6V5U5ÚX8L8V8U8ÚQ8W8V8U8ÚV16U16ÚA2W10V10U10ÚD16_LOCKABLEÚD32ÚD15S1ÚD24S8ÚD24X8ÚD24X4S4ÚD16ÚD32F_LOCKABLEÚD24FS8ÚD32_LOCKABLEÚS8_LOCKABLEÚL16Ú
VERTEXDATAÚINDEX16ÚINDEX32ÚQ16W16V16U16ÚR16FÚG16R16FÚA16B16G16R16FÚR32FÚG32R32FÚA32B32G32R32FÚCxV8U8ÚA1ÚA2B10G10R10_XR_BIASÚBINARYBUFFERÚi32ÚUYVYÚ	R8G8_B8G8r  Ú	G8R8_G8B8ÚDXT1ÚDXT2ÚDXT3ÚDXT4ÚDXT5ÚDX10ÚBC4SÚBC4UÚBC5SÚBC5UÚATI1ÚATI2ÚMULTI2_ARGB8r   r   r   r    r%  Ã   s’    r%  ÚDDSD_ÚDDSCAPS_Ú	DDSCAPS2_ÚDDPF_c                   @  s(   e Zd ZdZdZddd„Zdd	d
„ZdS )ÚDdsImageFileÚDDSzDirectDraw SurfaceÚreturnÚNonec                 C  s®  t | j d¡ƒsd}t|ƒ‚t d| j d¡¡\}|dkr(dt|ƒ› �}t|ƒ‚| j |d ¡}t|ƒdkrBdt|ƒ› d�}t|ƒ‚t	 
|¡}t d	| d
¡¡\}}}||f| _d| j }t d	| d
¡¡\}	}
}t d| d¡¡ t d| d¡¡\}}}}d}d }|tj@ r³|tj@ r“d| _d}nd| _d}t d|› d�| |d ¡¡}d|d||ffg| _d S |tj@ rÛ|dkrÁd| _�nt|dkrÏ|tj@ rÏd| _�nfd|› d|› �}t|ƒ‚|tj@ rôd| _t d| j d¡¡| _d| j_�nA|tj@ �r,|d }|tjk�rd| _d| _d}�n'|tjk�rd| _d | _d!}�n|tjk�r.d| _d"| _d}�n|tjtjfv �r@d| _d#| _d}nõ|tj k�rOd| _d$| _d%}næ|tj!tj"fv �rad| _d&| _d%}nÔ|tj#k�r!|d'7 }t d| j d¡¡\}| j d¡ |t$j%t$j&fv �rŽd| _d(| _d}n§|t$j't$j(fv �r d| _d#| _d}n•|t$j)t$j*fv �r²d| _d&| _d%}nƒ|t$j+k�rÁd| _d$| _d%}nt|t$j,k�rÐd| _d)| _d*}ne|t$j-k�rßd| _d+| _d*}nV|t$j.t$j/t$j0fv �rþd| _d,| _d-}|t$j0k�rýd.| j1d/< n7|t$j2t$j3t$j4fv �rd| _|t$j4k�rd.| j1d/< nd0|› �}t5|ƒ‚d1t|ƒ› �}t5|ƒ‚d2|› �}t5|ƒ‚|�rGt6 7d3|||| jf¡g| _d S t6 7d4|d|�pQ| j¡g| _d S )5Nr   znot a DDS filez<Ié|   zUnsupported header size éx   zIncomplete header: z bytesz<3IrA   ©r   r   z<11Ir`   ú<4IrE   r   ÚRGBAr7   r:   ú<ÚIÚdds_rgbr   ÚLÚLAzUnsupported bitcount z for ÚPr'   rc  r   re  r   rg  ÚBC4rk  r;   ÚBC5rI   ÚBC1ÚBC6Hr<   ÚBC6HSÚBC7r=   g]tÑEÝ?ÚgammazUnimplemented DXGI format zUnimplemented pixel format zUnknown pixel format flags ÚbcnÚraw)8Ú_acceptÚfpÚreadÚSyntaxErrorÚstructÚunpackÚreprÚOSErrorÚlenÚioÚBytesIOÚ_sizeÚsizer0   r7   r3   Ú_modeÚtiler8   r6   r	   r‹  ÚpaletteÚmoder5   r%  rc  Úpixel_formatre  rg  rj  rm  rk  rl  rn  rh  r9   ró   rò   rû   rü   rþ   rÿ   r   r  r  r  r  r  ÚinforÇ   rÈ   rÉ   ÚNotImplementedErrorr   Ú_Tile)ÚselfÚmsgÚheader_sizeÚheader_bytesÚheaderÚflagsÚheightÚwidthÚextentsÚpitchÚdepthÚmipmapsÚpfsizeÚpfflagsÚfourccÚbitcountÚnÚrawmodeÚ
mask_countÚmasksÚoffsetÚdxgi_formatr   r   r    Ú_openO  sþ   








þý
€ý
€


ÿ zDdsImageFile._openÚposÚintc                 C  s   d S )Nr   )r¡  r¸  r   r   r    Ú	load_seekÝ  s   zDdsImageFile.load_seekN)rv  rw  )r¸  r¹  rv  rw  )r   r   r   ÚformatÚformat_descriptionr·  rº  r   r   r   r    rt  K  s    
 rt  c                   @  s   e Zd ZdZd	dd„ZdS )
ÚDdsRgbDecoderTÚbufferÚbytesrv  útuple[int, int]c                 C  s$  | j d usJ ‚| j\}}g }g }|D ]0}d}|dkr6||d ? |d > |kr6|d7 }||d ? |d > |ks&| |¡ | ||? ¡ qtƒ }|d }	| jj| jj t|ƒ }
t|ƒ|
k r‹t 	| j  
|	¡d¡}t|ƒD ]\}}||@ }|tt||| ? ||  d ƒƒ7 }qjt|ƒ|
k s\|  |¡ dS )Nr   r   r   Úlittleéÿ   )éÿÿÿÿr   )ÚfdÚargsÚappendÚ	bytearrayÚstateÚxsizeÚysizer”  r¹  Ú
from_bytesrŽ  Ú	enumerater   Ú
set_as_raw)r¡  r¾  r°  r´  Úmask_offsetsÚmask_totalsÚmaskrµ  ÚdataÚ	bytecountÚdest_lengthÚvalueÚiÚmasked_valuer   r   r    Údecodeä  s2   
ÿ
ÿû
zDdsRgbDecoder.decodeN)r¾  r¿  rv  rÀ  )r   r   r   Ú	_pulls_fdr×  r   r   r   r    r½  á  s    r½  ÚimúImage.Imager�  ú	IO[bytes]Úfilenameústr | bytesrv  rw  c                 C  s¨  | j dvrd| j › d�}t|ƒ‚| j d dk}| j d dkr0tj}| j }|r+g d¢}n(g d	¢}n#tj}| j d d d… }g d
¢}|rS|  ¡ \}}	}
}t d|||	|
f¡} |rZ|tjO }| 	|r`dnd¡ t
jt
jB t
jB t
jB t
jB }t|  ¡ ƒd }| j| d d }| ttƒt dd|| j| j|dd¡ tjdgd¢R Ž  t dd|d|¡ tjdg|¢R Ž  t dtjdddd¡ ¡ t | |t dd| j d|ddf¡g¡ d S )N)r7   r|  r€  r�  zcannot write mode z as DDSrÃ  ÚAr   r€  )rÂ  rÂ  rÂ  )ì      ~ rß  rß  )i  ÿ i ÿ  rÂ  r|  rß  r   r=   z<7Irx  Ú11I)r   r   r   r   r   r   r   r   r   r   r   r{  r1   z<5Ir‹  rz  r   )rœ  r“  r0   r8   r7   Úsplitr   Úmerger3   rÆ  r   r   r   r   r   r   r”  Úgetbandsr¨  ÚwriteÚo32Ú	DDS_MAGICr�  Úpackr§  r"   r$   r   Ú_saver   r˜  )rÙ  r�  rÜ  r¢  ÚalphaÚpixel_flagsr²  Ú	rgba_maskÚrÚgÚbÚar¦  r°  rª  r   r   r    rè    s^   



øÿõóòñÿ ÿrè  Úprefixr¿  Úboolc                 C  s   | d d… dkS )Nr   s   DDS r   )rð  r   r   r    rŒ  8  s   rŒ  r  z.dds)rÙ  rÚ  r�  rÛ  rÜ  rÝ  rv  rw  )rð  r¿  rv  rñ  ){Ú__doc__Ú
__future__r   r•  r�  ÚsysÚenumr   r   Útypingr   Ú r   r   r	   Ú_binaryr
   r_  r   r   rå  ræ  r   r"   r&   r0   r9   r%  Úmodulesr   ÚmoduleÚitemÚnameÚsetattrrÔ  Úitem1Úitem2Úitem3r5   Ú
DDS_FOURCCr7   ÚDDS_RGBr3   ÚDDS_RGBAr8   ÚDDS_LUMINANCEÚDDS_LUMINANCEAr4   Ú	DDS_ALPHAr6   ÚDDS_PAL8r   r   r   r   ÚDDS_HEADER_FLAGS_TEXTUREr   ÚDDS_HEADER_FLAGS_MIPMAPr   ÚDDS_HEADER_FLAGS_VOLUMEr   ÚDDS_HEADER_FLAGS_PITCHr   ÚDDS_HEADER_FLAGS_LINEARSIZEÚ
DDS_HEIGHTÚ	DDS_WIDTHr$   ÚDDS_SURFACE_FLAGS_TEXTUREr#   r%   ÚDDS_SURFACE_FLAGS_MIPMAPÚDDS_SURFACE_FLAGS_CUBEMAPr(   r)   ÚDDS_CUBEMAP_POSITIVEXr*   ÚDDS_CUBEMAP_NEGATIVEXr+   ÚDDS_CUBEMAP_POSITIVEYr,   ÚDDS_CUBEMAP_NEGATIVEYr-   ÚDDS_CUBEMAP_POSITIVEZr.   ÚDDS_CUBEMAP_NEGATIVEZrc  ÚDXT1_FOURCCre  ÚDXT3_FOURCCrg  ÚDXT5_FOURCCrÇ   ÚDXGI_FORMAT_R8G8B8A8_TYPELESSrÈ   ÚDXGI_FORMAT_R8G8B8A8_UNORMrÉ   ÚDXGI_FORMAT_R8G8B8A8_UNORM_SRGBrþ   ÚDXGI_FORMAT_BC5_TYPELESSrÿ   ÚDXGI_FORMAT_BC5_UNORMr   ÚDXGI_FORMAT_BC5_SNORMr  ÚDXGI_FORMAT_BC6H_UF16r  ÚDXGI_FORMAT_BC6H_SF16r  ÚDXGI_FORMAT_BC7_TYPELESSr  ÚDXGI_FORMAT_BC7_UNORMr  ÚDXGI_FORMAT_BC7_UNORM_SRGBrt  Ú	PyDecoderr½  rè  rŒ  Úregister_openr»  Úregister_decoderÚregister_saveÚregister_extensionr   r   r   r    Ú<module>   sš    
|
M 
#
4