Added ia1 conversion

This commit is contained in:
KiritoDv
2023-10-19 11:12:24 -06:00
parent 5025c4bebe
commit a66b259d7c
2 changed files with 36 additions and 3 deletions
+35 -3
View File
@@ -8,12 +8,36 @@ namespace fs = std::filesystem;
static const std::unordered_map <std::string, TextureType> gTextureTypes = {
{ "RGBA16", TextureType::RGBA16bpp },
{ "RGBA32", TextureType::RGBA32bpp },
{ "IA1", TextureType::GrayscaleAlpha4bpp },
{ "IA1", TextureType::GrayscaleAlpha1bpp },
{ "IA4", TextureType::GrayscaleAlpha4bpp },
{ "IA8", TextureType::GrayscaleAlpha8bpp },
{ "IA16", TextureType::GrayscaleAlpha16bpp },
};
uint8_t* alloc_ia8_text_from_i1(uint16_t *in, int16_t width, int16_t height) {
int32_t inPos;
uint16_t bitMask;
int16_t outPos = 0;
uint8_t* out = new uint8_t[width * height];
for (inPos = 0; inPos < (width * height) / 16; inPos++) {
bitMask = 0x8000;
while (bitMask != 0) {
if (BSWAP16(in[inPos]) & bitMask) {
out[outPos] = 0xFF;
} else {
out[outPos] = 0x00;
}
bitMask /= 2;
outPos++;
}
}
return out;
}
bool TextureFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector<uint8_t>& buffer) {
auto format = data["format"].as<std::string>();
@@ -37,8 +61,16 @@ bool TextureFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::v
if(data["mio0"]){
auto mio0 = data["mio0"].as<size_t>();
auto decoded = MIO0Decoder::Decode(buffer, offset);
WRITE_U32(size);
WRITE_ARRAY(decoded.data() + mio0, size);
auto data = decoded.data() + mio0;
if(type == TextureType::GrayscaleAlpha1bpp){
auto ia8 = alloc_ia8_text_from_i1((uint16_t*)data, 8, 16);
WRITE_U32(8 * 16);
WRITE_ARRAY(ia8, 8 * 16);
delete[] ia8;
} else {
WRITE_U32(size);
WRITE_ARRAY(data, size);
}
} else {
WRITE_U32(size);
WRITE_ARRAY(buffer.data() + offset, size);
+1
View File
@@ -10,6 +10,7 @@ enum class TextureType {
Palette8bpp,
Grayscale4bpp,
Grayscale8bpp,
GrayscaleAlpha1bpp,
GrayscaleAlpha4bpp,
GrayscaleAlpha8bpp,
GrayscaleAlpha16bpp,