Merge pull request #148 from Ybalrid/16bit-lodepng-good-byteswap

When writing out a 16bit image with lodepng, simplify the byteswap to big-endian
This commit is contained in:
Syoyo Fujita 2019-03-04 01:15:20 +09:00 committed by GitHub
commit 8f76d790b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -44,21 +44,11 @@ static void ToBigEndian(std::vector<uint8_t>* image) {
return; return;
} }
auto swap2 =
[](uint16_t* val) {
uint16_t tmp = *val;
uint8_t* dst = reinterpret_cast<uint8_t*>(val);
uint8_t* src = reinterpret_cast<uint8_t*>(&tmp);
dst[0] = src[1];
dst[1] = src[0];
};
uint16_t *ptr = reinterpret_cast<uint16_t *>(image->data()); uint16_t *ptr = reinterpret_cast<uint16_t *>(image->data());
size_t n = image->size() / 2; size_t n = image->size() / 2;
for (size_t i = 0; i < n; i++) { for (size_t i = 0; i < n; i++) {
swap2(&ptr[i]); ptr[i] = ((0xFF00 & ptr[i]) >> 8) | ((0x00FF & ptr[i]) << 8);
} }
} }