1

アプリバンドル内のpngからアルファなしのグレースケール画像を作成できるようにしたいと思います。

これは機能し、イメージが作成されます。

// Create graphics context the size of the overlapping rectangle
UIGraphicsBeginImageContext(rectangleOfOverlap.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();

// More stuff

CGContextDrawImage(ctx, drawRect2, [UIImage imageNamed:@"Image 01.png"].CGImage);

// Create the new UIImage from the context
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

ただし、結果の画像は1ピクセルあたり32ビットで、アルファチャネルがあるため、CGCreateImageWithMaskを使用すると機能しません。このようにビットマップコンテキストを作成しようとしました:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef ctx =CGBitmapContextCreate(nil, rectangleOfOverlap.size.width, rectangleOfOverlap.size.height, 8, rectangleOfOverlap.size.width , colorSpace, kCGImageAlphaNone);

UIGraphicsGetImageFromCurrentImageContextはゼロを返し、結果の画像は作成されません。私はここで何か馬鹿げたことをしていますか?

どんな助けでも大歓迎です。

よろしく

デイブ

4

1 に答える 1

0

OK、私には答えがあると思います(またはそれらのいくつか)...

コンテキストの作成が失敗した場合、コンソールウィンドウに適切なエラーメッセージが表示され、失敗した理由が示されます。この場合、コンテキストが作成されるため、エラーは発生しません。

次に、CGBtimapContextでサポートされているパラメータのリストは次のとおりです: http ://developer.apple.com/mac/library/qa/qa2001/qa1037.html

第三に、UIGraphicsGetImageFromCurrentImageContext()は、UIGraphicsBeginGraphicsContext()を使用して作成された汎用コンテキストでのみ機能します。

UIImage *newImage = [UIImage imageWithCGImage:CGBitmapContextCreateImage(ctx)];

また、ドキュメントでは10.3以降のメモリが処理されると記載されていますが、最初のパラメータとしてNULLを使用してコンテキストを作成すると、CGBitmapContextGetData(ctx)を使用して基になるピクセルデータを取得できません。これを回避するために、次のメソッドを作成しました。

- (CGContextRef) newGreyScaleBitmapContextOfSize:(CGSize) size;

このメソッドは、メモリをmallocしてコンテキストを作成し、コンテキスト参照を返します。それが包括的かどうかはわかりませんが、これに何日も費やしてきたので、これまでに発見したことをお知らせしたいと思いました。

お役に立てれば、

デイブ

于 2010-04-29T06:34:26.067 に答える