CGContext的可变大小



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

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

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

所以有一个解决方案来设置CGContext的可变大小,或调整CGContext 与很少的内存消耗?

我找到了一个解决方案,即每次必须调整大小时创建一个新的更大的上下文。下面是这个神奇的函数:

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,就像这里建议的那样。我试过了,但是它使我的代码崩溃。

相关内容

  • 没有找到相关文章

最新更新