CGAffineTransform transform = CGAffineTransformMakeRotation(angleInRadians);
CGRect rotatedRect = CGRectApplyAffineTransform(imgRect, transform);
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+ CGColorSpaceRef colorSpace = CGImageGetColorSpace(imgRef);
CGContextRef bmContext = CGBitmapContextCreate(NULL,
(size_t)rotatedRect.size.width,
(size_t)rotatedRect.size.height,
kCGImageAlphaPremultipliedFirst);
CGContextSetAllowsAntialiasing(bmContext, FALSE);
CGContextSetInterpolationQuality(bmContext, kCGInterpolationNone);
- CGColorSpaceRelease(colorSpace);
// Rotate
CGContextTranslateCTM(bmContext,
return rotatedImage;
}
+- (CGColorSpaceRef)copyColorSpaceWithColorPrimaries:(int)colorPrimaries
+{
+ const CGFloat whitePoint[] = {0.95047, 1.0, 1.08883};
+ const CGFloat blackPoint[] = {0, 0, 0};
+
+ // See https://developer.apple.com/library/content/technotes/tn2257/_index.html
+ const CGFloat gamma[] = {1.961, 1.961, 1.961};
+
+ // RGB/XYZ Matrices (D65 white point)
+ switch (colorPrimaries) {
+ case HB_COLR_PRI_EBUTECH:
+ {
+ // Rec. 601, 625 line
+ const CGFloat matrix[] = {0.4305538, 0.2220043, 0.0201822,
+ 0.3415498, 0.7066548, 0.1295534,
+ 0.1783523, 0.0713409, 0.9393222};
+ return CGColorSpaceCreateCalibratedRGB(whitePoint, blackPoint, gamma, matrix);
+ }
+ case HB_COLR_PRI_SMPTEC:
+ {
+ // Rec. 601, 525 line
+ const CGFloat matrix[] = {0.3935209, 0.2123764, 0.0187391,
+ 0.3652581, 0.7010599, 0.1119339,
+ 0.1916769, 0.0865638, 0.9583847};
+ return CGColorSpaceCreateCalibratedRGB(whitePoint, blackPoint, gamma, matrix);
+ }
+ case HB_COLR_PRI_BT709:
+ default:
+ {
+ // Rec. 709
+ const CGFloat matrix[] = {0.4124564, 0.2126729, 0.0193339,
+ 0.3575761, 0.7151522, 0.1191920,
+ 0.1804375, 0.0721750, 0.9503041};
+ return CGColorSpaceCreateCalibratedRGB(whitePoint, blackPoint, gamma, matrix);
+ }
+ }
+}
+
- (CGImageRef)copyImageAtIndex:(NSUInteger)index
forTitle:(HBTitle *)title
pictureFrame:(HBPicture *)frame
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNone;
CFMutableDataRef imgData = CFDataCreateMutable(kCFAllocatorDefault, 3 * image->width * image->height);
CGDataProviderRef provider = CGDataProviderCreateWithCFData(imgData);
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+ CGColorSpaceRef colorSpace = [self copyColorSpaceWithColorPrimaries:title.hb_title->color_prim];
+
img = CGImageCreate(image->width,
image->height,
8,