summaryrefslogtreecommitdiff
path: root/platform/ios/src/UIImage+MGLAdditions.mm
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-01-25 17:28:23 +0100
committerKonstantin Käfer <mail@kkaefer.com>2017-01-26 15:26:55 +0100
commit19bd68d3a2c1236bf092596a9ef2ac0f7364d195 (patch)
tree6ea396fab89277a75d792b4627075af9e8e86b93 /platform/ios/src/UIImage+MGLAdditions.mm
parent46fe0df2a2a2b4c28d8579245c0caad258a8b512 (diff)
downloadqtlocation-mapboxgl-19bd68d3a2c1236bf092596a9ef2ac0f7364d195.tar.gz
[macos,ios] don't roundtrip through encodePNG when converting images
Diffstat (limited to 'platform/ios/src/UIImage+MGLAdditions.mm')
-rw-r--r--platform/ios/src/UIImage+MGLAdditions.mm35
1 files changed, 12 insertions, 23 deletions
diff --git a/platform/ios/src/UIImage+MGLAdditions.mm b/platform/ios/src/UIImage+MGLAdditions.mm
index 7b5737f5e4..d99a1f73ed 100644
--- a/platform/ios/src/UIImage+MGLAdditions.mm
+++ b/platform/ios/src/UIImage+MGLAdditions.mm
@@ -1,42 +1,31 @@
#import "UIImage+MGLAdditions.h"
+#include <mbgl/util/image+MGLAdditions.hpp>
+
@implementation UIImage (MGLAdditions)
- (nullable instancetype)initWithMGLSpriteImage:(const mbgl::SpriteImage *)spriteImage
{
- std::string png = encodePNG(spriteImage->image);
- NSData *data = [[NSData alloc] initWithBytes:png.data() length:png.size()];
- if (self = [self initWithData:data scale:spriteImage->pixelRatio])
+ CGImageRef image = CGImageFromMGLPremultipliedImage(spriteImage->image.clone());
+ if (!image) {
+ return nil;
+ }
+
+ if (self = [self initWithCGImage:image scale:spriteImage->pixelRatio orientation:UIImageOrientationUp])
{
if (spriteImage->sdf)
{
self = [self imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
}
}
+ CGImageRelease(image);
return self;
}
-- (std::unique_ptr<mbgl::SpriteImage>)mgl_spriteImage
-{
- CGImageRef cgImage = self.CGImage;
- size_t width = CGImageGetWidth(cgImage);
- size_t height = CGImageGetHeight(cgImage);
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
- mbgl::PremultipliedImage cPremultipliedImage({ static_cast<uint32_t>(width), static_cast<uint32_t>(height) });
- size_t bytesPerPixel = 4;
- size_t bytesPerRow = bytesPerPixel * width;
- size_t bitsPerComponent = 8;
-
- CGContextRef context = CGBitmapContextCreate(cPremultipliedImage.data.get(),
- width, height, bitsPerComponent, bytesPerRow,
- colorSpace, kCGImageAlphaPremultipliedLast);
-
- CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);
- CGContextRelease(context);
- CGColorSpaceRelease(colorSpace);
-
+- (std::unique_ptr<mbgl::SpriteImage>)mgl_spriteImage {
BOOL isTemplate = self.renderingMode == UIImageRenderingModeAlwaysTemplate;
- return std::make_unique<mbgl::SpriteImage>(std::move(cPremultipliedImage), float(self.scale), isTemplate);
+ return std::make_unique<mbgl::SpriteImage>(MGLPremultipliedImageFromCGImage(self.CGImage),
+ float(self.scale), isTemplate);
}
@end