// Create an CGImageRef and copy the libhb image into it.
// The image data returned by hb_get_preview2 is 4 bytes per pixel, BGRA format.
// Alpha is ignored.
- CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNone;
- CFMutableDataRef imgData = CFDataCreateMutable(kCFAllocatorDefault, 3 * image->width * image->height);
+ CFMutableDataRef imgData = CFDataCreateMutable(kCFAllocatorDefault, 0);
+ CFDataSetLength(imgData, 3 * image->width * image->height);
+
+ UInt8 *src_line = image->data;
+ UInt8 *dst = CFDataGetMutableBytePtr(imgData);
+ for (int r = 0; r < image->height; r++)
+ {
+ UInt8 *src = src_line;
+ for (int c = 0; c < image->width; c++)
+ {
+ *dst++ = src[2];
+ *dst++ = src[1];
+ *dst++ = src[0];
+ src += 4;
+ }
+ src_line += image->plane[0].stride;
+ }
+
CGDataProviderRef provider = CGDataProviderCreateWithCFData(imgData);
+
+ CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNone;
CGColorSpaceRef colorSpace = copyColorSpace(title.hb_title->color_prim,
title.hb_title->color_transfer,
title.hb_title->color_matrix);
NULL,
NO,
kCGRenderingIntentDefault);
+
CGColorSpaceRelease(colorSpace);
CGDataProviderRelease(provider);
CFRelease(imgData);
- UInt8 *src_line = image->data;
- UInt8 *dst = CFDataGetMutableBytePtr(imgData);
- for (int r = 0; r < image->height; r++)
- {
- UInt8 *src = src_line;
- for (int c = 0; c < image->width; c++)
- {
- *dst++ = src[2];
- *dst++ = src[1];
- *dst++ = src[0];
- src += 4;
- }
- src_line += image->plane[0].stride;
- }
-
hb_image_close(&image);
}