3

h3                 @   s  d Z ddlZddlmZ ddl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Z/eZ0eZ1eZ2eeB Z3eZ4eeB Z5eeB Z6eeB Z7eeB Z8eeB Z9eeB Z:dZ;dZ<dZ=dZ>dZ?dZ@dZAd ZBd!ZCd"ZDd#ZEd$ZFG d%d& d&ejZGd'd( ZHd)d* ZIejJeGjKeGeI ejLeGjKeH ejMeGjKd+ 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)o32leiDDS          i   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   s"  t jd| jjd\}}|dkr2tdt| | jj|d }t|dkrbtdt| dt|}t jd	|jd
\}}}||f| _d| _	t jd	|jd
\}}	}
t jd|jd t jd|jd\}}|jd}t jd|jd\}t jd|jd}|t
@ rdd t|D }d}|dkr:||d 7 }nd| _	||d |d  |d  7 }dd3| j d|d d d4 ddffg| _n|d }d}|dkrd| _d}nX|d krd!| _d"}n@|d#krd$| _d%}n(|d&krd'| _d(}d| _	n
|d)kr|d*7 }t jd| jjd\}| jjd |ttfkrLd+| _d(}d| _	n|tkrhd'| _d(}d| _	n|ttfkrd,| _d-}nl|tkrd,| _d5| jd/< d-}nL|tttfkrdd6| j dd7fg| _|tkrd8| jd/< d S td0| ntd1t| d2d9| j ||| jffg| _d S ):Nz<IIr	   |   zUnsupported header size r   x   zIncomplete header: z bytesz<3I   RGBAz<11I,   z<2Iz<Iz<4I   c             S   s"   i | ]\}}d dddg| |qS )RGBA ).0imaskr    r    R/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/PIL/DdsImagePlugin.py
<dictcomp>   s    z&DdsImageFile._open.<locals>.<dictcomp> r
   l      ~ RGBi   i      rawr   r   s   DXT1ZDXT1s   DXT3ZDXT3r   s   DXT5ZDXT5   s   BC5SZBC5S   s   DX10   ZBC5ZBC7   g@gammazUnimplemented DXGI format zUnimplemented pixel format Zbcn)r   r   g]tE?)r   r   )r   r   r   g]tE?)r   r   )structunpackfpreadOSErrorreprlenr   _sizemodeDDPF_RGB	enumeratesizeZtileZpixel_formatDXGI_FORMAT_BC5_TYPELESSDXGI_FORMAT_BC5_UNORMDXGI_FORMAT_BC5_SNORM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magicZheader_sizeheader_bytesheaderflagsheightwidthZpitchdepthZmipmapsZpfsizeZpfflagsZfourccZbitcountmasksrawmodeZ
data_startnZdxgi_formatr    r    r$   _openq   s    



*











zDdsImageFile._openc             C   s   d S )Nr    )rG   posr    r    r$   	load_seek   s    zDdsImageFile.load_seekN)__name__
__module____qualname__formatformat_descriptionrR   rT   r    r    r    r$   r   m   s   Xr   c          
   C   s  | j ddfkr td| j  d|jtttd tttB tB tB t	B  t| j
 t| j t| j| j dkrrdnd d d	  td
 td
 td
d  td t| j dkrtnt td
 t| j dkrdnd td td td t| j dkrdnd
 tt td
 td
 td
 td
  | j dkrf| j \}}}}tjd||||f} tj| |dd
d
f| j d
| j d d d  d
dffg d S )Nr'   r   zcannot write mode z as DDSr   r
      r-   r	   r      i   i   r(   l      ~ r)   r   )r8   r4   writeo32	DDS_MAGIC	DDSD_CAPSDDSD_HEIGHT
DDSD_WIDTH
DDSD_PITCHDDSD_PIXELFORMATrL   rM   DDS_RGBAr9   DDSCAPS_TEXTUREsplitr   merger   _saver;   )Zimr2   filenamergbar    r    r$   rh      s     rh   c             C   s   | d d dkS )Nr   s   DDS r    )prefixr    r    r$   _accept   s    ro   z.dds)N__doc__r0   ior   r&   r   r   _binaryr   r]   r^   r_   r`   ra   rb   rc   ZDDSD_MIPMAPCOUNTZDDSD_LINEARSIZEZ
DDSD_DEPTHZDDSCAPS_COMPLEXre   ZDDSCAPS_MIPMAPZDDSCAPS2_CUBEMAPZDDSCAPS2_CUBEMAP_POSITIVEXZDDSCAPS2_CUBEMAP_NEGATIVEXZDDSCAPS2_CUBEMAP_POSITIVEYZDDSCAPS2_CUBEMAP_NEGATIVEYZDDSCAPS2_CUBEMAP_POSITIVEZZDDSCAPS2_CUBEMAP_NEGATIVEZZDDSCAPS2_VOLUMEZDDPF_ALPHAPIXELSZ
DDPF_ALPHAZDDPF_FOURCCZDDPF_PALETTEINDEXED8r9   ZDDPF_LUMINANCEZ
DDS_FOURCCZDDS_RGBrd   Z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_FOURCCrC   rD   rE   r<   r=   r>   r?   r@   rA   r   rh   ro   Zregister_openrX   Zregister_saveZregister_extensionr    r    r    r$   <module>   s   `$