2013-03-25 99 views
0

我目前使用UIGraphicsBeginImageContext(resultingImageSize);來創建圖像。CGContext的可變大小

但是當我調用這個函數時,我不知道resultingImageSize的寬度。實際上,我開發了一些消耗大量內存的視頻處理,並且我不能先處理然後再繪製:在期間我必須畫出視頻處理。

如果我設置,例如UIGraphicsBeginImageContext(CGSizeMake(300, 400));,超過400的繪製部分丟失。

那麼有沒有一種解決方案來設置一個可變大小的CGContext,或調整一個CGContext 幾乎沒有內存消耗

回答

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; 
} 

我不知道是否可以優化,例如用memcpyas suggested here。我嘗試過,但它使我的代碼崩潰。