0

我目前正在使用 aUIGraphicsBeginImageContext(resultingImageSize);创建图像。

但是当我调用这个函数时,我并不确切知道resultingImageSize.
确实,我开发了某种消耗大量内存的视频处理,我不能先处理后绘制:我必须视频过程中绘制。

如果我设置,例如UIGraphicsBeginImageContext(CGSizeMake(300, 400));,超过 400 的绘制部分会丢失。

那么有没有一种解决方案来设置可变大小的 CGContext,或者调整 CGContext 的大小而内存消耗很少

4

1 回答 1

0

我通过每次必须调整大小时创建一个更大的新上下文来找到解决方案。这是魔术功能:

void MPResizeContextWithNewSize(CGContextRef *c, CGSize s) {
    size_t bitsPerComponents = CGBitmapContextGetBitsPerComponent(*c);
    size_t numberOfComponents = CGBitmapContextGetBitsPerPixel(*c) / bitsPerComponents;
    CGContextRef newContext = CGBitmapContextCreate(NULL, s.width, s.height, bitsPerComponents, sizeof(UInt8)*s.width*numberOfComponents,
                                                    CGBitmapContextGetColorSpace(*c), CGBitmapContextGetBitmapInfo(*c));
    // Copying context content
    CGImageRef im = CGBitmapContextCreateImage(*c);
    CGContextDrawImage(newContext, CGRectMake(0, 0, CGBitmapContextGetWidth(*c), CGBitmapContextGetHeight(*c)), im);
    CGImageRelease(im);

    CGContextRelease(*c);
    *c = newContext;
}

我想知道是否可以对其进行优化,例如使用memcpy如建议的here。我试过了,但它使我的代码崩溃。

于 2013-03-26T13:14:02.013 回答