forked from VoxeLibre/VoxeLibre
Allow encoding with B8G8R8A8 colormap
This commit is contained in:
parent
7446a275b5
commit
685bdcb379
|
@ -59,6 +59,7 @@ These images contain a palette, followed by pixel data.
|
||||||
|
|
||||||
* `A1R5G5B5` (8bpp RGB)
|
* `A1R5G5B5` (8bpp RGB)
|
||||||
* `B8G8R8` (8bpp RGB)
|
* `B8G8R8` (8bpp RGB)
|
||||||
|
* `B8G8R8A8` (8bpp RGBA)
|
||||||
|
|
||||||
### True-Color Images (Type 2)
|
### True-Color Images (Type 2)
|
||||||
|
|
||||||
|
@ -82,6 +83,5 @@ These images contain compressed RGB(A) pixel data.
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
* Support Type 1 `B8G8R8A8` output (color-mapped 8bpp RGBA)
|
|
||||||
* Actually support `R8G8B8A8` input for `A1R5G5B5` output
|
* Actually support `R8G8B8A8` input for `A1R5G5B5` output
|
||||||
* Add both zoomable and explorable maps to `mcl_maps`.
|
* Add both zoomable and explorable maps to `mcl_maps`.
|
||||||
|
|
20
examples.lua
20
examples.lua
|
@ -128,3 +128,23 @@ local pixels = {
|
||||||
tga_encoder.image(pixels):save("colormapped_B8G8R8.tga", {colormap=colormap})
|
tga_encoder.image(pixels):save("colormapped_B8G8R8.tga", {colormap=colormap})
|
||||||
-- encoding as A1R5G5B5 saves 1 byte per palette entry → 103 bytes
|
-- encoding as A1R5G5B5 saves 1 byte per palette entry → 103 bytes
|
||||||
tga_encoder.image(pixels):save("colormapped_A1R5G5B5.tga", {colormap=colormap, color_format="A1R5G5B5"})
|
tga_encoder.image(pixels):save("colormapped_A1R5G5B5.tga", {colormap=colormap, color_format="A1R5G5B5"})
|
||||||
|
|
||||||
|
-- encode a colormapped bitmap with transparency
|
||||||
|
local _ = { 0 }
|
||||||
|
local K = { 1 }
|
||||||
|
local W = { 2 }
|
||||||
|
local colormap = {
|
||||||
|
{ 0, 0, 0, 0 },
|
||||||
|
{ 0, 0, 0, 255 },
|
||||||
|
{ 255, 255, 255, 255 },
|
||||||
|
}
|
||||||
|
local pixels = {
|
||||||
|
{ _, K, K, K, K, K, _ },
|
||||||
|
{ _, K, W, W, W, K, _ },
|
||||||
|
{ K, K, W, W, W, K, K },
|
||||||
|
{ K, W, W, W, W, W, K },
|
||||||
|
{ _, K, W, W, W, K, _ },
|
||||||
|
{ _, _, K, W, K, _, _ },
|
||||||
|
{ _, _, _, K, _, _, _ },
|
||||||
|
}
|
||||||
|
tga_encoder.image(pixels):save("colormapped_B8G8R8A8.tga", {colormap=colormap})
|
||||||
|
|
30
init.lua
30
init.lua
|
@ -68,7 +68,8 @@ function image:encode_colormap(properties)
|
||||||
local color_format = properties.color_format
|
local color_format = properties.color_format
|
||||||
assert (
|
assert (
|
||||||
"A1R5G5B5" == color_format or
|
"A1R5G5B5" == color_format or
|
||||||
"B8G8R8" == color_format
|
"B8G8R8" == color_format or
|
||||||
|
"B8G8R8A8" == color_format
|
||||||
)
|
)
|
||||||
local colors = {}
|
local colors = {}
|
||||||
if "A1R5G5B5" == color_format then
|
if "A1R5G5B5" == color_format then
|
||||||
|
@ -98,6 +99,17 @@ function image:encode_colormap(properties)
|
||||||
)
|
)
|
||||||
colors[#colors + 1] = color_bytes
|
colors[#colors + 1] = color_bytes
|
||||||
end
|
end
|
||||||
|
elseif "B8G8R8A8" == color_format then
|
||||||
|
for i = 1,#colormap,1 do
|
||||||
|
local color = colormap[i]
|
||||||
|
local color_bytes = string.char(
|
||||||
|
color[3], -- B
|
||||||
|
color[2], -- G
|
||||||
|
color[1], -- R
|
||||||
|
color[4] -- A
|
||||||
|
)
|
||||||
|
colors[#colors + 1] = color_bytes
|
||||||
|
end
|
||||||
end
|
end
|
||||||
assert( 0 ~= #colors )
|
assert( 0 ~= #colors )
|
||||||
self.data = self.data .. table.concat(colors)
|
self.data = self.data .. table.concat(colors)
|
||||||
|
@ -182,10 +194,18 @@ function image:encode_data(properties)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif "B8G8R8A8" == color_format then
|
elseif "B8G8R8A8" == color_format then
|
||||||
if "RAW" == compression then
|
if 0 ~= #colormap then
|
||||||
self:encode_data_R8G8B8A8_as_B8G8R8A8_raw()
|
if "RAW" == compression then
|
||||||
elseif "RLE" == compression then
|
if 8 == self.pixel_depth then
|
||||||
self:encode_data_R8G8B8A8_as_B8G8R8A8_rle()
|
self:encode_data_Y8_as_Y8_raw()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if "RAW" == compression then
|
||||||
|
self:encode_data_R8G8B8A8_as_B8G8R8A8_raw()
|
||||||
|
elseif "RLE" == compression then
|
||||||
|
self:encode_data_R8G8B8A8_as_B8G8R8A8_rle()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local data_length_after = #self.data
|
local data_length_after = #self.data
|
||||||
|
|
Loading…
Reference in New Issue