2

以下のコードに示すように、画像ファイルを読み取り、変更を加えずに再表示していますが、次のエラーが発生します。

: CGBitmapContextCreate: サポートされていないパラメーターの組み合わせ: 8 整数ビット/コンポーネント; 16 ビット/ピクセル。1 成分色空間。kCGImageAlphaPremultipliedLast; 3792 バイト/行。

コードは次のとおりです。

CGImageRef sourceImage = theImage.image.CGImage;

CFDataRef theData;
theData = CGDataProviderCopyData(CGImageGetDataProvider(sourceImage));

UInt8 *pixelData = (UInt8 *) CFDataGetBytePtr(theData);

CGContextRef context;
context = CGBitmapContextCreate(pixelData,
                                 CGImageGetWidth(sourceImage),
                                 CGImageGetHeight(sourceImage),
                                 8,
                                 CGImageGetBytesPerRow(sourceImage),
                                 CGImageGetColorSpace(sourceImage),
                                 kCGImageAlphaPremultipliedLast);

CGImageRef newCGImage = CGBitmapContextCreateImage(context);
UIImage *newImage = [UIImage imageWithCGImage:newCGImage];

CGContextRelease(context);
CFRelease(theData);
CGImageRelease(newCGImage);

theImage.image = newImage;

最近 Xcode 4.4 にアップグレードするまで、このコードは問題なく動作していました。

iPhone CGContextRef CGBitmapContextCreate のサポートされていないパラメーターの組み合わせの提案に従って、「CGImageGetColorSpace(sourceImage)」を「CGColorSpaceCreateDeviceRGB()」に置き換えましたが、次のエラーが発生しました。

: CGBitmapContextCreate: 無効なデータ バイト/行: 8 整数ビット/コンポーネント、3 コンポーネント、kCGImageAlphaPremultipliedLast の場合、少なくとも 15168 である必要があります。

次に、「CGImageGetBytesPerRow(sourceImage)」を「CGImageGetBytesPerRow(sourceImage)*4」に置き換えたところ、エラーはなくなりましたが、4X 縮小画像のコピーが横に並べて表示されました。

誰もこの問題に遭遇しましたか? Xcode 4.4 のアップグレードに関連していますか?

ありがとう!シャイ

4

1 に答える 1

4

kCGImageAlphaPremultipliedLast の代わりに kCGImageAlphaNone を使用して解決しました。カラー画像がグレースケールに変わる理由/方法、および以前は機能していたものが動作を変更した理由はまだわかりませんが、少なくとも表示は得られます。

于 2012-09-07T06:16:04.037 に答える