@@ -91,15 +91,21 @@ static inline CGContextRef _Nullable CreateWebPCanvas(BOOL hasAlpha, CGSize canv
91
91
WEBP_CSP_MODE ConvertCSPMode (CGBitmapInfo bitmapInfo) {
92
92
// Get alpha info, byteOrder info
93
93
CGImageAlphaInfo alphaInfo = bitmapInfo & kCGBitmapAlphaInfoMask ;
94
- CGBitmapInfo byteOrderInfo = bitmapInfo & kCGBitmapByteOrderMask ;
94
+ CGImageByteOrderInfo byteOrderInfo = bitmapInfo & kCGBitmapByteOrderMask ;
95
+ size_t bitsPerPixel = 8 ;
96
+ if (bitmapInfo & kCGBitmapFloatComponents ) {
97
+ bitsPerPixel = 16 ; // 16-Bits, which don't support currently!
98
+ }
95
99
BOOL byteOrderNormal = NO ;
96
100
switch (byteOrderInfo) {
97
- case kCGBitmapByteOrderDefault : {
101
+ case kCGImageByteOrderDefault : {
98
102
byteOrderNormal = YES ;
99
103
} break ;
100
- case kCGBitmapByteOrder32Little : {
104
+ case kCGImageByteOrder32Little :
105
+ case kCGImageByteOrder16Little : {
101
106
} break ;
102
- case kCGBitmapByteOrder32Big : {
107
+ case kCGImageByteOrder32Big :
108
+ case kCGImageByteOrder16Big : {
103
109
byteOrderNormal = YES ;
104
110
} break ;
105
111
default : break ;
@@ -161,7 +167,7 @@ WEBP_CSP_MODE ConvertCSPMode(CGBitmapInfo bitmapInfo) {
161
167
break ;
162
168
case kCGImageAlphaOnly : {
163
169
// A
164
- // Unsupported
170
+ // Unsupported!
165
171
return MODE_LAST;
166
172
}
167
173
break ;
@@ -621,8 +627,13 @@ - (nullable CGImageRef)sd_createWebpImageWithData:(WebPData)webpData colorSpace:
621
627
CGBitmapInfo bitmapInfo = pixelFormat.bitmapInfo ;
622
628
WEBP_CSP_MODE mode = ConvertCSPMode (bitmapInfo);
623
629
if (mode == MODE_LAST) {
624
- NSAssert (NO , @" Unsupported libwebp preferred CGBitmapInfo: %d " , bitmapInfo);
625
- return nil ;
630
+ #if DEBUG
631
+ NSLog (@" Unsupported libwebp preferred CGBitmapInfo: %d " , bitmapInfo);
632
+ #endif
633
+ // Fallback to RGBA8888/RGB888 instead
634
+ mode = MODE_rgbA;
635
+ bitmapInfo = kCGBitmapByteOrderDefault ;
636
+ bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedLast : kCGImageAlphaNoneSkipLast ;
626
637
}
627
638
config.output .colorspace = mode;
628
639
config.options .use_threads = 1 ;
0 commit comments