2017-02-07 1 views
0

저는이 투데이 위젯을 쓰고 있습니다. 이미지를 표시해야합니다. 위젯이로드 될 때마다 이미지가 다시 그려진다는 것을 알게되었습니다. 이것은 약 0.5 초가 걸립니다. 몇 가지 조사를 한 결과, 이미지 파일이 색인 된 색 공간에 있다는 것을 알았습니다. 그래서 내 질문은 : 이 파일을 iPhone을보다 효율적으로 표시 할 수있는 방법으로이 파일을 변환하려면 어떻게해야합니까? 예를 들어, RGB 파일. 그런 다음 새 파일에 저장하고 새 파일을 UIImageView에로드합니다.색인 된 색상 .png를 RGB 또는 그레이 스케일로 변환

나는 이것이 솔루션 방향이라고 생각하기 때문에 CGImage로 조금 놀았지만 흰색 UIImageView로 끝납니다. 이 방법에

UIImage * theCartoon = [UIImage imageWithData:imageData]; 
    CGImageRef si = [theCartoon CGImage]; 
    CGDataProviderRef src = CGImageGetDataProvider(si); 
    CGImageRef imageRef = CGImageCreateWithPNGDataProvider(src, NULL, NO, kCGRenderingIntentDefault); 
    cartoon.image = [[UIImage alloc] initWithCGImage:imageRef]; 

어떤 제안 :

이 내 코드는? 몇 가지 명백한 잘못된 프로그래밍?

답변

1

// The source image 
CGImageRef image = theCartoon.CGImage; 
CGSize size = CGSizeMake(CGImageGetWidth(image), CGImageGetHeight(image)); 

// The result image in RGB color space 
CGImageRef result = nil; 

// Check color space 
CGColorSpaceRef srcColorSpace = CGImageGetColorSpace(image); 
if (CGColorSpaceGetModel(imageColorSpace) != kCGColorSpaceModelRGB) { 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef context = CGBitmapContextCreate(nil, size.width, size.height, 8, 0, colorSpace, kCGImageAlphaNoneSkipLast); 

    CGRect rect = {CGPointZero, size}; 
    CGContextDrawImage(context, rect, image); 
    result = CGBitmapContextCreateImage(context); 

    CGContextRelease(context); 
    CGColorSpaceRelease(colorSpace); 
} 
시도
관련 문제