@@ -8,6 +8,7 @@
|
||||
#include <math/ColorMatrix.h>
|
||||
#include <math/Rectangle.h>
|
||||
#include <math/Vector2.h>
|
||||
#include <system/Endian.h>
|
||||
#include <system/System.h>
|
||||
#include <utils/Bytes.h>
|
||||
#include <stdint.h>
|
||||
@@ -31,7 +32,7 @@ namespace lime {
|
||||
static void MultiplyAlpha (Image* image);
|
||||
static void Resize (Image* image, ImageBuffer* buffer, int width, int height);
|
||||
static void SetFormat (Image* image, PixelFormat format);
|
||||
static void SetPixels (Image* image, Rectangle* rect, Bytes* bytes, int offset, PixelFormat format);
|
||||
static void SetPixels (Image* image, Rectangle* rect, Bytes* bytes, int offset, PixelFormat format, Endian endian);
|
||||
static int Threshold (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, int operation, int32_t threshold, int32_t color, int32_t mask, bool copySource);
|
||||
static void UnmultiplyAlpha (Image* image);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
19
project/include/system/Endian.h
Normal file
19
project/include/system/Endian.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#ifndef LIME_SYSTEM_ENDIAN_H
|
||||
#define LIME_SYSTEM_ENDIAN_H
|
||||
|
||||
|
||||
namespace lime {
|
||||
|
||||
|
||||
enum Endian {
|
||||
|
||||
LITTLE_ENDIAN,
|
||||
BIG_ENDIAN
|
||||
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user