From c1f8ea13524f398f8d1720e5f03a17dd66352ebf Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 30 Jan 2022 20:40:59 +0800 Subject: ... --- src/osx/graphics/quartz/ImageFactory.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/osx/graphics/quartz/ImageFactory.cpp (limited to 'src/osx/graphics/quartz/ImageFactory.cpp') diff --git a/src/osx/graphics/quartz/ImageFactory.cpp b/src/osx/graphics/quartz/ImageFactory.cpp new file mode 100644 index 00000000..c59ff126 --- /dev/null +++ b/src/osx/graphics/quartz/ImageFactory.cpp @@ -0,0 +1,31 @@ +#include "cru/osx/graphics/quartz/ImageFactory.hpp" +#include "cru/osx/graphics/quartz/Convert.hpp" +#include "cru/osx/graphics/quartz/Image.hpp" +#include "cru/platform/graphics/Image.hpp" + +#include + +namespace cru::platform::graphics::osx::quartz { +QuartzImageFactory::QuartzImageFactory(IGraphicsFactory* graphics_factory) + : OsxQuartzResource(graphics_factory) {} + +QuartzImageFactory::~QuartzImageFactory() {} + +std::unique_ptr QuartzImageFactory::DecodeFromStream( + io::Stream* stream) { + CGDataProviderRef data_provider = ConvertStreamToCGDataProvider(stream); + CGImageSourceRef image_source = + CGImageSourceCreateWithDataProvider(data_provider, nullptr); + + CGImageRef cg_image = + CGImageSourceCreateImageAtIndex(image_source, 0, nullptr); + + QuartzImage* image = + new QuartzImage(GetGraphicsFactory(), this, cg_image, true); + + CFRelease(cg_image); + CGDataProviderRelease(data_provider); + + return std::unique_ptr(image); +} +} // namespace cru::platform::graphics::osx::quartz -- cgit v1.2.3