私のアプリでUIImageのピクセルのアルファ値を変更する方法を見つけることができましたが、2つのエラーが発生しています最初に引き起こされる)。しかし、私は何が起こっているのか把握することはできません。iPhone SDK - <Error>:CGBitmapContextCreate:サポートされていないカラースペース
私の方法:
- (void)modifyAlpha:(int)x and:(int)y {
CGContextRef ctx;
CGImageRef imageRef = [scratchOffImage CGImage];
NSUInteger width = CGImageGetWidth(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *rawData = malloc(height * width * 4);
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height,
bitsPerComponent, bytesPerRow, colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
CGContextRelease(context);
// Now your rawData contains the image data in the RGBA8888 pixel format.
int byteIndex = (bytesPerRow * y) + x * bytesPerPixel;
rawData[byteIndex+3] = (char) (255); //Change the pixel value
ctx = CGBitmapContextCreate(rawData,
CGImageGetWidth(imageRef),
CGImageGetHeight(imageRef),
8,
CGImageGetBytesPerRow(imageRef),
CGImageGetColorSpace(imageRef),
kCGImageAlphaPremultipliedFirst); //This line causes an error: incorrect colorspace
imageRef = CGBitmapContextCreateImage (ctx);
UIImage* rawImage = [UIImage imageWithCGImage:imageRef];
CGContextRelease(ctx);
scratchOffImage = rawImage;
[scratchOffImageView setImage:scratchOffImage];
free(rawData);
}
エラー:
<Error>: CGBitmapContextCreate: unsupported color space.
がライン上でスローされます。
ctx = CGBitmapContextCreate(rawData, ...
した後、第2のエラー:
<Error>: CGBitmapContextCreateImage: invalid context 0x0
はライン上でスローされます。
imageRef = CGBitmapContextCreateImage (ctx);
私のイメージは、私が最初にフォーマットとしてtransparancyとPNG-8を使用して、Web機能のためにそれをPhotoshopの保存を出力することによってそれを作ったバンドルに含まれています。
この関数が最初に使用されたサンプルコードを実行すると、サンプルイメージが正常に機能しました。しかし、私のイメージはありません。これをどのようにデバッグできますか?
これをどのようにデバッグすることができますか?私の入力PNGが正しくフォーマットされていない可能性がありますか?これをどうすれば確認できますか?
乾杯、 ブレット
EDIT 1:元のソースコードはhereを発見した例から来ました。サンプルではグレースケールに変換されていますが、アルファ値を変更するだけです。
EDIT 2:画像をPNG-8とPNG-24として保存しようとしましたが、両方とも運がありません。
CGImageGetWidth(imageRef); CGImageGetHeight(imageRef);デバッガが設定された直後に停止した場合、イメージの有効な値が返されますか? –
@ジョアヒム:彼らは確かです。それは私がチェックした最初のものの一つでした。 :-) – Brett