2017-02-07 6 views
0

イメージを表示する必要があるTodayウィジェットを作成しています。 ウィジェットが読み込まれるたびに、イメージが再描画されることに気付きました。これには約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); 
} 
をお試しください
関連する問題