summaryrefslogtreecommitdiff
path: root/Source/Asura.Engine/Graphics/ImageData.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-03-01 08:50:34 +0800
committerchai <chaifix@163.com>2019-03-01 08:50:34 +0800
commit64d9d7b3eb7cece81da8b2cb56eb0f50d87a5964 (patch)
tree12bde99e5415f77f60f8873a66d09bfd3b84ec48 /Source/Asura.Engine/Graphics/ImageData.cpp
parente28a7d48d032fe7fd4c8789e95fbc659873a0adc (diff)
*misc
Diffstat (limited to 'Source/Asura.Engine/Graphics/ImageData.cpp')
-rw-r--r--Source/Asura.Engine/Graphics/ImageData.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/Source/Asura.Engine/Graphics/ImageData.cpp b/Source/Asura.Engine/Graphics/ImageData.cpp
new file mode 100644
index 0000000..af448bd
--- /dev/null
+++ b/Source/Asura.Engine/Graphics/ImageData.cpp
@@ -0,0 +1,56 @@
+#include "ImageData.h"
+#include "PNGDecoder.h"
+#include "STBDecoder.h"
+
+namespace AsuraEngine
+{
+ namespace Graphics
+ {
+
+ using namespace std;
+
+ // imagedecoderΪԡ
+ list<ImageDecoder*> ImageData::ImageDecoders = {
+ new PNGDecoder(), // png
+ new STBDecoder() // jpeg, tga, bmp
+ };
+
+ void ImageData::ReleaseAllDecoders()
+ {
+ for (ImageDecoder* decoder : ImageDecoders)
+ decoder->Release();
+ }
+
+ ImageData::ImageData(const Filesystem::DataBuffer* buffer)
+ : DecodedData(buffer)
+ {
+ }
+
+ ImageData::~ImageData()
+ {
+ if (pixels)
+ delete[] pixels;
+ }
+
+ ///
+ /// ޷ɹ׳쳣
+ ///
+ void ImageData::Decode(const Filesystem::DataBuffer* buffer)
+ {
+ for (ImageDecoder* decoder : ImageDecoders)
+ {
+ if (decoder->CanDecode(buffer))
+ {
+ decoder->Decode(buffer, this);
+ return;
+ }
+ }
+ }
+
+ Color ImageData::GetPixel(uint x, uint y)
+ {
+
+ }
+
+ }
+} \ No newline at end of file