2012-09-10 68 views
0

我正在開發一個圖像處理應用程序,用於解壓縮和顯示圖像。我們的圖像數據是每種顏色24位,分別是RGB。CGSConvertBGR888toRGBA8888從哪裏來?

我使用線程來解壓縮圖像並返回一個UIImage指針到MainThread,然後UIImageView將顯示圖像。

線程選擇是這樣的:

- (void)loadImage:(NSString *)name 
{ 
    @autoreleasepool{ 
     @synchronized(self){ 
      UIImage *image = [Reader loadImage:name]; 
      [self performSelectorOnMainThread:@selector(didLoadImage:) withObject:image waitUntilDone:YES]; 

     } 
    } 
} 

- (void)didLoadImage:(UIImage *)image 
{ 
    [self displayImage:image]; 
} 

我用一個UIScrollView顯示4個UIImageViews的。滾動速度越快,越容易崩潰,如果滾動速度較慢,它也會崩潰,但可以滾動更多圖像。崩潰與CGSConvertBGR888toRGBA8888有關。我嘗試使用NSException或Instruments來定位崩潰的來源,但都失敗了。

下面是關於崩潰的截圖。 enter image description here

所以我想知道哪些會導致崩潰?

回答

0

在我的情況下,我想手動釋放我提供給CGDataProviderCreateWithData的內存,並且也使用GCD中的CGDataProviderRef。這可能會導致這樣的問題。解決方法是將CGDataProviderReleaseDataCallback設置爲CGDataProviderCreateWithData的最後一個參數。這通常是這樣一個免費的功能:

void freeData(void *info, const void *data, size_t size) 
{ 
    free((void *)data); 
} 

更多細節,你可以參考我的另一個question