diff options
Diffstat (limited to 'src/osx/graphics')
-rw-r--r-- | src/osx/graphics/quartz/Image.cpp | 4 | ||||
-rw-r--r-- | src/osx/graphics/quartz/ImageFactory.cpp | 10 |
2 files changed, 9 insertions, 5 deletions
diff --git a/src/osx/graphics/quartz/Image.cpp b/src/osx/graphics/quartz/Image.cpp index feddad8c..28087000 100644 --- a/src/osx/graphics/quartz/Image.cpp +++ b/src/osx/graphics/quartz/Image.cpp @@ -11,7 +11,9 @@ QuartzImage::QuartzImage(IGraphicsFactory* graphics_factory, image_factory_(image_factory), image_(image), auto_release_(auto_release), - buffer_(buffer) {} + buffer_(buffer) { + Expects(image); +} QuartzImage::~QuartzImage() { if (auto_release_) { diff --git a/src/osx/graphics/quartz/ImageFactory.cpp b/src/osx/graphics/quartz/ImageFactory.cpp index 2c6d4705..5ff262c3 100644 --- a/src/osx/graphics/quartz/ImageFactory.cpp +++ b/src/osx/graphics/quartz/ImageFactory.cpp @@ -87,7 +87,7 @@ std::unique_ptr<IImage> QuartzImageFactory::CreateBitmap(int width, CGColorSpaceRef color_space = CGColorSpaceCreateDeviceRGB(); const auto buffer_size = width * height * 4; - auto buffer = new unsigned char[buffer_size]; + auto buffer = new unsigned char[buffer_size]{0}; auto cg_data_provider = CGDataProviderCreateWithData( nullptr, buffer, buffer_size, @@ -95,11 +95,13 @@ std::unique_ptr<IImage> QuartzImageFactory::CreateBitmap(int width, delete[] static_cast<const unsigned char*>(data); }); - auto cg_image = CGImageCreate(width, height, 8, 32, 4 * width, color_space, - kCGImageAlphaLast, nullptr, nullptr, true, - kCGRenderingIntentDefault); + auto cg_image = + CGImageCreate(width, height, 8, 32, 4 * width, color_space, + kCGImageAlphaPremultipliedLast, cg_data_provider, nullptr, + true, kCGRenderingIntentDefault); CGColorSpaceRelease(color_space); + CGDataProviderRelease(cg_data_provider); return std::unique_ptr<IImage>( new QuartzImage(GetGraphicsFactory(), this, cg_image, true, buffer)); |