Improve handling of Image endianness (resolve #1018, resolve #1070)

This commit is contained in:
Joshua Granick
2017-09-12 12:32:02 -07:00
parent 2932a9b517
commit 45054e39d6
9 changed files with 86 additions and 40 deletions

View File

@@ -3,6 +3,7 @@
#include <graphics/PixelFormat.h>
#include <system/Endian.h>
#include <stdint.h>
#include <math.h>
@@ -110,23 +111,32 @@ namespace lime {
}
inline void ReadUInt8 (const unsigned char* data, int offset, PixelFormat format, bool premultiplied) {
inline void ReadUInt8 (const unsigned char* data, int offset, PixelFormat format, bool premultiplied, Endian endian) {
switch (format) {
case BGRA32:
Set (data[offset + 2], data[offset + 1], data[offset], data[offset + 3]);
if (endian == LITTLE_ENDIAN)
Set (data[offset + 1], data[offset + 2], data[offset + 3], data[offset]);
else
Set (data[offset + 2], data[offset + 1], data[offset], data[offset + 3]);
break;
case RGBA32:
Set (data[offset], data[offset + 1], data[offset + 2], data[offset + 3]);
if (endian == LITTLE_ENDIAN)
Set (data[offset + 3], data[offset + 2], data[offset + 1], data[offset]);
else
Set (data[offset], data[offset + 1], data[offset + 2], data[offset + 3]);
break;
case ARGB32:
Set (data[offset + 1], data[offset + 2], data[offset + 3], data[offset]);
if (endian == LITTLE_ENDIAN)
Set (data[offset + 2], data[offset + 1], data[offset], data[offset + 3]);
else
Set (data[offset + 1], data[offset + 2], data[offset + 3], data[offset]);
break;
}