1
我需要將圖像旋轉90度,即交換寬度和高度(翻轉圖像)。在將圖像提供給編碼器以創建視頻之前,需要完成此操作。我用下面的代碼(參考:How do I export UIImage array as a movie?)CGAffineTransform旋轉90度
- (CVPixelBufferRef) newPixelBufferFromCGImage: (CGImageRef) image
{
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey,
[NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey,
nil];
CVPixelBufferRef pxbuffer = NULL;
CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, CGImageGetWidth(image),
CGImageGetHeight(image), kCVPixelFormatType_32ARGB, (CFDictionaryRef) options,
&pxbuffer);
NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL);
CVPixelBufferLockBaseAddress(pxbuffer, 0);
void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer);
NSParameterAssert(pxdata != NULL);
CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pxdata, CGImageGetWidth(image),
CGImageGetHeight(image), 8, 4*CGImageGetWidth(image), rgbColorSpace,
kCGImageAlphaNoneSkipFirst);
NSParameterAssert(context);
CGContextConcatCTM(context, CGAffineTransformMakeRotation(1.571)); // ROTATION
CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image),
CGImageGetHeight(image)), image);
CGColorSpaceRelease(rgbColorSpace);
CGContextRelease(context);
CVPixelBufferUnlockBaseAddress(pxbuffer, 0);
return pxbuffer;
}
然而,通過90度的旋轉不工作(通過評論表示)。你能找出問題嗎?
感謝您的回覆。我明白你的意思,但該方法仍然無效。此外,frameSize本身就是圖像大小。對不起,我已經更新了代碼。 –
這是我使用的代碼: CGContextTranslateCTM(context,CGImageGetHeight(image)/ 2,CGImageGetWidth(image)/ 2); CGContextRotateCTM(context,M_PI_2); CGContextTranslateCTM(context,-CGImageGetWidth(image)/ 2,-CGImageGetHeight(image)/ 2); 圖像旋轉但在旋轉時切出一半。 –
添加完整的代碼。一探究竟。創建上下文時,您必須已經混淆了大小。 –