Reputation: 504
There is white_small.png
, contains RGBA.
And there is white_small.dds
which was generated from previous one.
JFYI: it was generated by this way, using wand
from wand import image
with image.Image(filename="white_small.png") as img:
img.flip() # it just requred for more convenient using in pyglet scripts
# flip is not important for further case
img.compression = "dxt3"
img.save(filename="white_small.dds")
So, for an example if I want to know "Is pixel under x=2 and y=3 transparent in white_small.png
" it could be easily done.
import pyglet
img_png = pyglet.image.load("white_small.png") # 16*16
png_transparency_data = [
img_png.data[3::4][line * 16: (line + 1) * 16 - 1] # take every 4-th byte from RGBA
for line in range(16)
]
# png_transparency_data is
# [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
# b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff',
# b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff',
# b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff',
# b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff',
# b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff',
# b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff',
# b'\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff',
# b'\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff',
# b'\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff',
# b'\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',
# b'\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',
# b'\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',
# b'\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',
# b'\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',
# b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff']
It's quite clear: png_transparency_data[(y-1)][(x-1)]
which is 0 - means it's transparent.
Now about white_small.dds
. If white_small.dds
will be open in GIMP/any_editor - following picture will be shown: ( just user imagination to see this bytes in
white color :) )
[b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',
b'\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',
b'\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',
b'\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',
b'\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',
b'\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff',
b'\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff',
b'\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff',
b'\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff',
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff',
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff',
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff',
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff',
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff',
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff',
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00']
Let's look into white_small.dds
using pyglet:
import pyglet
img = pyglet.image.load("white_small.dds") # 16*16
dds_all_data = [img.data[line * 16: (line + 1) * 16 - 1] for line in range(16)]
# dds_all_data is
[b'\x00\x05\xff\x8f\xff\xc0\x0f\xe0\xff\xff\x00\x00\x00\x01\x05',
b'\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00',
b'\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00',
b'\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00',
b'\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
b'\x00\x05\xff\x8f\xff\xc0\x0f\xe0\xff\xff\x00\x00\x00\x01\x05',
b'\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00',
b'\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00',
b'\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
b'\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
b'\x00\x05\xff\x8f\xff\xc0\x0f\xe0\xff\xff\x00\x00\x00\x01\x05',
b'\x00\x05\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00',
b'\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
b'\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
b'\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
b'\x00\x05\xff\x8f\xff\xc0\x0f\xe0\xff\xff\x00\x00\x00\x01\x05']
And here I have no idea how to map this data to coordinates.
How to get information(transparency/color) about x and y coordinate from .dds
data?
PS: I know, that dxt3
compress image in ration 4:1, but it doesn't give me a clue for solving my question :(
Upvotes: 1
Views: 202