summaryrefslogtreecommitdiff
path: root/platform/macos/src/NSImage+MGLAdditions.mm
diff options
context:
space:
mode:
Diffstat (limited to 'platform/macos/src/NSImage+MGLAdditions.mm')
-rw-r--r--platform/macos/src/NSImage+MGLAdditions.mm23
1 files changed, 20 insertions, 3 deletions
diff --git a/platform/macos/src/NSImage+MGLAdditions.mm b/platform/macos/src/NSImage+MGLAdditions.mm
index 9c30d3c37b..397e291431 100644
--- a/platform/macos/src/NSImage+MGLAdditions.mm
+++ b/platform/macos/src/NSImage+MGLAdditions.mm
@@ -1,11 +1,28 @@
#import "NSImage+MGLAdditions.h"
+#include <mbgl/util/image+MGLAdditions.hpp>
+
@implementation NSImage (MGLAdditions)
+- (nullable instancetype)initWithMGLPremultipliedImage:(mbgl::PremultipliedImage&&)src {
+ CGImageRef image = CGImageFromMGLPremultipliedImage(std::move(src));
+ if (!image) {
+ return nil;
+ }
+
+ self = [self initWithCGImage:image size:NSZeroSize];
+ CGImageRelease(image);
+ return self;
+}
+
- (nullable instancetype)initWithMGLSpriteImage:(const mbgl::SpriteImage *)spriteImage {
- std::string png = encodePNG(spriteImage->image);
- NSData *data = [[NSData alloc] initWithBytes:png.data() length:png.size()];
- NSBitmapImageRep *rep = [NSBitmapImageRep imageRepWithData:data];
+ CGImageRef image = CGImageFromMGLPremultipliedImage(spriteImage->image.clone());
+ if (!image) {
+ return nil;
+ }
+
+ NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithCGImage:image];
+ CGImageRelease(image);
if (self = [self initWithSize:NSMakeSize(spriteImage->getWidth(), spriteImage->getHeight())]) {
[self addRepresentation:rep];
[self setTemplate:spriteImage->sdf];