This commit is contained in:
Бранимир Караџић
2024-07-20 08:40:02 -07:00
parent e154af4821
commit aaf9125234

View File

@@ -93,17 +93,16 @@ namespace bimg
uint32_t width = 0; uint32_t width = 0;
uint32_t height = 0; uint32_t height = 0;
unsigned error;
LodePNGState state; LodePNGState state;
lodepng_state_init(&state); lodepng_state_init(&state);
state.decoder.color_convert = 0; state.decoder.color_convert = 0;
uint8_t* data = NULL; uint8_t* data = NULL;
error = lodepng_decode(&data, &width, &height, &state, (uint8_t*)_data, _size); const uint32_t lodePngError = lodepng_decode(&data, &width, &height, &state, (uint8_t*)_data, _size);
if (0 != error) if (0 != lodePngError)
{ {
_err->setError(BIMG_ERROR, "lodepng_decode failed."); BX_ERROR_SET(_err, BIMG_ERROR, "lodepng_decode failed.");
} }
else else
{ {
@@ -249,7 +248,8 @@ namespace bimg
if (palette) if (palette)
{ {
if (1 == state.info_raw.bitdepth) { if (1 == state.info_raw.bitdepth)
{
for (uint32_t ii = 0, num = width*height/8; ii < num; ++ii) for (uint32_t ii = 0, num = width*height/8; ii < num; ++ii)
{ {
uint8_t* dst = (uint8_t*)output->m_data + ii*32; uint8_t* dst = (uint8_t*)output->m_data + ii*32;
@@ -263,7 +263,8 @@ namespace bimg
bx::memCopy(dst + 28, state.info_raw.palette + ( data[ii] &0x1)*4, 4); bx::memCopy(dst + 28, state.info_raw.palette + ( data[ii] &0x1)*4, 4);
} }
} }
else if (2 == state.info_raw.bitdepth) { else if (2 == state.info_raw.bitdepth)
{
for (uint32_t ii = 0, num = width*height/4; ii < num; ++ii) for (uint32_t ii = 0, num = width*height/4; ii < num; ++ii)
{ {
uint8_t* dst = (uint8_t*)output->m_data + ii*16; uint8_t* dst = (uint8_t*)output->m_data + ii*16;
@@ -273,7 +274,8 @@ namespace bimg
bx::memCopy(dst + 12, state.info_raw.palette + ( data[ii] &0x3)*4, 4); bx::memCopy(dst + 12, state.info_raw.palette + ( data[ii] &0x3)*4, 4);
} }
} }
else if (4 == state.info_raw.bitdepth) { else if (4 == state.info_raw.bitdepth)
{
for (uint32_t ii = 0, num = width*height/2; ii < num; ++ii) for (uint32_t ii = 0, num = width*height/2; ii < num; ++ii)
{ {
uint8_t* dst = (uint8_t*)output->m_data + ii*8; uint8_t* dst = (uint8_t*)output->m_data + ii*8;
@@ -281,7 +283,8 @@ namespace bimg
bx::memCopy(dst + 4, state.info_raw.palette + ( data[ii] &0xf)*4, 4); bx::memCopy(dst + 4, state.info_raw.palette + ( data[ii] &0xf)*4, 4);
} }
} }
else { else
{
for (uint32_t ii = 0, num = width*height; ii < num; ++ii) for (uint32_t ii = 0, num = width*height; ii < num; ++ii)
{ {
bx::memCopy( (uint8_t*)output->m_data + ii*4, state.info_raw.palette + data[ii]*4, 4); bx::memCopy( (uint8_t*)output->m_data + ii*4, state.info_raw.palette + data[ii]*4, 4);
@@ -317,10 +320,10 @@ namespace bimg
uint8_t* dst = (uint8_t*)output->m_data + ii*4; uint8_t* dst = (uint8_t*)output->m_data + ii*4;
// Note: not exactly precise. // Note: not exactly precise.
// Correct way: dst[0] = uint8_t(float( (eightBits>>6)&0x3)*(255.0f/4.0f) ); // Correct way: dst[0] = uint8_t(float( (eightBits>>6)&0x3)*(255.0f/4.0f) );
dst[0] = uint8_t(uint32_t(((eightBits>>6)&0x3)*64)&0xff); dst[0] = uint8_t(uint32_t( ( (eightBits>>6)&0x3)*64)&0xff);
dst[1] = uint8_t(uint32_t(((eightBits>>4)&0x3)*64)&0xff); dst[1] = uint8_t(uint32_t( ( (eightBits>>4)&0x3)*64)&0xff);
dst[2] = uint8_t(uint32_t(((eightBits>>2)&0x3)*64)&0xff); dst[2] = uint8_t(uint32_t( ( (eightBits>>2)&0x3)*64)&0xff);
dst[3] = uint8_t(uint32_t(((eightBits )&0x3)*64)&0xff); dst[3] = uint8_t(uint32_t( ( (eightBits )&0x3)*64)&0xff);
} }
} }
else if (4 == state.info_raw.bitdepth) else if (4 == state.info_raw.bitdepth)
@@ -333,8 +336,8 @@ namespace bimg
uint8_t* dst = (uint8_t*)output->m_data + ii*2; uint8_t* dst = (uint8_t*)output->m_data + ii*2;
// Note: not exactly precise. // Note: not exactly precise.
// Correct way: dst[0] = uint8_t(float( (eightBits>>4)&0xf)*(255.0f/16.0f) ); // Correct way: dst[0] = uint8_t(float( (eightBits>>4)&0xf)*(255.0f/16.0f) );
dst[0] = uint8_t(uint32_t(((eightBits>>4)&0xf)*16)&0xff); dst[0] = uint8_t(uint32_t( ( (eightBits>>4)&0xf)*16)&0xff);
dst[1] = uint8_t(uint32_t(((eightBits )&0xf)*16)&0xff); dst[1] = uint8_t(uint32_t( ( (eightBits )&0xf)*16)&0xff);
} }
} }
else if (16 == state.info_raw.bitdepth else if (16 == state.info_raw.bitdepth
@@ -371,7 +374,7 @@ namespace bimg
} }
} }
} }
else if(16 == state.info_raw.bitdepth) else if (16 == state.info_raw.bitdepth)
{ {
for (uint32_t ii = 0, num = width * height; ii < num; ++ii) for (uint32_t ii = 0, num = width * height; ii < num; ++ii)
{ {