summaryrefslogtreecommitdiff
path: root/source/modules/asura-core/image/image_data.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/modules/asura-core/image/image_data.cpp')
-rw-r--r--source/modules/asura-core/image/image_data.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/source/modules/asura-core/image/image_data.cpp b/source/modules/asura-core/image/image_data.cpp
new file mode 100644
index 0000000..1a6d3a2
--- /dev/null
+++ b/source/modules/asura-core/image/image_data.cpp
@@ -0,0 +1,62 @@
+#include "image_data.h"
+#include "png_decoder.h"
+#include "stb_decoder.h"
+#include "image_decoder.h"
+
+namespace AsuraEngine
+{
+ namespace Graphics
+ {
+
+ using namespace std;
+
+ // imagedecoderΪԡ
+ list<ImageDecoder*> ImageData::ImageDecoders = {
+ new PNGDecoder(), // png
+ new STBDecoder() // jpeg, tga, bmp
+ };
+
+ ImageData::ImageData()
+ : pixels(nullptr)
+ , size(0)
+ , width(0)
+ , height(0)
+ , format(COLOR_FORMAT_UNKNOWN)
+ {
+ }
+
+ ImageData::~ImageData()
+ {
+ if (pixels)
+ delete[] pixels;
+ }
+
+ void ImageData::Decode(IO::DataBuffer& buffer)
+ {
+ for (ImageDecoder* decoder : ImageDecoders)
+ {
+ if (decoder->CanDecode(buffer))
+ {
+ decoder->Decode(buffer, *this);
+ return;
+ }
+ }
+ }
+
+ Color ImageData::GetPixel(uint x, uint y)
+ {
+ return Color();
+ }
+
+ void ImageData::Lock()
+ {
+ mMutex.Lock();
+ }
+
+ void ImageData::Unlock()
+ {
+ mMutex.Unlock();
+ }
+
+ }
+} \ No newline at end of file