1

CGContextRef を使用して画像にいくつかの変換を適用しようとしています。私は CGContextTranslateCTM、CGContextScaleCTM、および CGContextRotateCTM 関数を使用していますが、物事を単純にするために、最初の関数だけに焦点を当てます。次のコードが元の画像を正確に生成するのはなぜですか?! 何か不足していますか?

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGContextRef g = CGBitmapContextCreate((void*) pixelData, 
                                                       width, 
                                                       height, 
                                                       RGBA_8_BIT, 
                                                       bytesPerRow, 
                                                       colorSpace, 

                                                   kCGImageAlphaPremultipliedLast);

CGContextSetShouldAntialias(g, YES);

CGContextSetInterpolationQuality(g, kCGInterpolationHigh);

CGContextTranslateCTM( g,translateX, translateY );


CGImageRef tempImg  = CGBitmapContextCreateImage (g);
CGContextDrawImage( g, CGRectMake (0, 0, width, height), tempImg );
CGContextRelease(g);
CGColorSpaceRelease( colorSpace );

また、翻訳後、この画像の上に別の画像を描画する方法を説明しますが、部分的な透明度 (例: アルファ = 0.5) を使用します。

たくさん検索しましたが、答えが見つかりませんでした。助けていただければ幸いです... :)

pixelData からコンテキストを作成していること、および翻訳後に tempImg が作成されることに注意してください。元の画像が現在作成されているため、初期化に問題はありませんが、問題は翻訳にあると思います..

4

3 に答える 3

5

グラフィック状態への変換は、後続の描画操作にのみ影響します。既存の画像データは変更されません。画像に変換を適用する場合は、次のようにしてみてください。

  1. 空のCGContextを作成します(iPhoneでは、UIGraphicsBeginImageContextを使用します)
  2. グラフィックスの状態を平行移動、拡大縮小、または回転します
  3. その中に既存の画像を描画します。
  4. 新しいCGContextから画像を取得します(iPhoneでは、UIGraphicsGetImageFromCurrentImageContextを使用します)

手順3を実行すると、変換が適用された状態で、既存の画像が新しいグラフィックスコンテキストに描画されます。ここでの秘訣は、変換を適用するために、実際に何かを描画する必要があるということです。

この方法で変換を使用すると、いくつかの本当にクールなことができます。画像の半分を描画し、いくつかの変換を適用し、さらにいくつかを描画することができます。

于 2009-06-21T17:41:04.660 に答える
-1

画像を描画した後、 CGBitmapContextCreateImage() を呼び出す必要があります。

次に、最初の画像の上に別の画像を描画し、再度 CGBitmapContextCreateImage() を呼び出して 2 番目の画像を取得できます。CGContextSetAlpha(ctx, alphaValue); を使用してアルファを設定できます。

于 2009-06-21T17:04:47.090 に答える