2012-09-10 1 views
0

저는 이미지 압축을 풀고 이미지를 표시하는 이미지 프로세스 앱을 만들고 있습니다. 우리의 이미지 데이터는 RGB 당 24 비트 컬러입니다.어디에서 CGSConvertBGR888toRGBA8888입니까?

이미지를 압축 해제하고 MainThread에 UIImage 포인터를 반환하는 스레드를 사용하면 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]; 
} 

내가 4 UIImageViews을 표시 할 수있는 UIScrollView를 사용

스레드 선택이 같은 것입니다. 더 빠르게 스크롤 할 때 충돌이 일어나기 쉽고, 느리게 스크롤하면 충돌하지만 더 많은 이미지를 스크롤 할 수 있습니다. 크래시는 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을 참조 할 수 있습니다가.

관련 문제