aboutsummaryrefslogtreecommitdiff
path: root/src/osx/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'src/osx/graphics')
-rw-r--r--src/osx/graphics/quartz/Image.cpp4
-rw-r--r--src/osx/graphics/quartz/ImageFactory.cpp10
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));