Ios Alpha图像转换为.mov

Ios 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,

我已经能够创建playing.mov,方法是遵循堆栈上的各种方法

但是,我的图像包含alpha

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)。有关详细信息。