Ios Alpha图像转换为.mov
我已经能够创建playing.mov,方法是遵循堆栈上的各种方法 但是,我的图像包含alphaIos Alpha图像转换为.mov,ios,uiimage,mov,cgbitmapcontextcreate,Ios,Uiimage,Mov,Cgbitmapcontextcreate,我已经能够创建playing.mov,方法是遵循堆栈上的各种方法 但是,我的图像包含alpha CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB(); CGBitmapInfo bitmapInfo = (CGBitmapInfo) kCGImageAlphaNoneSkipLast; CGContextRef context = CGBitmapContextCreate(pxdata, size.width,
CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = (CGBitmapInfo) kCGImageAlphaNoneSkipLast;
CGContextRef context = CGBitmapContextCreate(pxdata, size.width,
size.height, 8, 4*size.width, rgbColorSpace,
bitmapInfo);
这就产生了
我有一种感觉,这是由于bitmapInfo
,但是当我使用kgimagealphalast
时,我的应用程序崩溃了
这个错误
CGBitmapContextCreate:不支持的参数组合:8个整数位/分量;32位/像素;三分量颜色空间;kCGImageAlphaLast;688字节/行。
我希望有一个简单的解决办法,我不确定我错过了什么
这是我的完整像素缓冲代码
- (CVPixelBufferRef) pixelBufferFromCGImage: (CGImageRef) image {
CGSize size = CGSizeMake(self.imageWidth, self.imageHeight);
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey,
[NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey,
nil];
CVPixelBufferRef pxbuffer = NULL;
CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault,
size.width,
size.height,
kCVPixelFormatType_32ARGB,
(__bridge CFDictionaryRef) options,
&pxbuffer);
if (status != kCVReturnSuccess){
NSLog(@"Failed to create pixel buffer");
}
NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL);
CVPixelBufferLockBaseAddress(pxbuffer, 0);
void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer);
NSParameterAssert(pxdata != NULL);
CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = (CGBitmapInfo) kCGImageAlphaLast;
CGContextRef context = CGBitmapContextCreate(pxdata, size.width,
size.height, 8, 4*size.width, rgbColorSpace,
bitmapInfo);
//kCGImageAlphaNoneSkipFirst);
NSParameterAssert(context);
CGContextConcatCTM(context, CGAffineTransformMakeRotation(0));
CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image),
CGImageGetHeight(image)), image);
CGColorSpaceRelease(rgbColorSpace);
CGContextRelease(context);
CVPixelBufferUnlockBaseAddress(pxbuffer, 0);
return pxbuffer;
}
问题是图像需要是16的一个因子!见图:-)每行字节的大小可以更改。如果有4*size.width,则应将其替换为CVPixelBufferGetBytesPerRow(pxbuffer)。有关详细信息。