diff options
Diffstat (limited to 'platform/macos/src/NSImage+MGLAdditions.mm')
-rw-r--r-- | platform/macos/src/NSImage+MGLAdditions.mm | 23 |
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]; |