2009-08-17 8 views
2

最終的にiPhoneで使用するためにボックスブラー機能を使用しています。CGLayerを使用して複数の画像をオフスクリーンで表示する方法

すなわち機能はUIImageを取り、透明なコピーを描き、第一側に、その画像を取得し、うまくボケ画像を戻し、上記および下記の透明コピーを引きます。

Drawing with Quartz 2D Programming Guideを読んで、それはこの種の操作のためCGLayersを使用することをお勧めします。

ガイドのサンプルコードは、私が理解するために少し密であるので、私は誰かが私にUIImageを取って、私はそれから引くCGLayerに変換するのは非常に簡単な例を表示したいと思いUIImageのコピーを返します。

値をハードコーディングされた場合は(簡単にするために)OKであろう。これは私の周りを包み込むためのものであり、プロダクションコードではありません。

+0

@Joe - あなたが何か答えがある場合は、してください。このサイトのポイントは、任意のポイントを得ることではなく、他の人を助けることです。スコアは単に正の行動の補強に過ぎない。誰かがあなたの答えに投票していないからといって、あなたがそれを書いて時間を無駄にするわけではありません。少なくとも、あなたは質問に答える過程で何かを学んだかもしれません。 –

+0

@Joeあなたが手助けしたい場合は、手伝ってください。 – willc2

答えて

2
UIImage *myImage = …; 
CGLayerRef layer = CGLayerCreateWithContext(destinationContext, myImage.size, /*auxiliaryInfo*/ NULL); 
if (layer) { 
    CGContextRef layerContext = CGLayerGetContext(layer); 
    CGContextDrawImage(layerContext, (CGRect){ CGPointZero, myImage.size }, myImage.CGImage); 

    //Use CGContextDrawLayerAtPoint or CGContextDrawLayerInRect as many times as necessary. Whichever function you choose, be sure to pass destinationContext to it—you can't draw the layer into itself! 

    CFRelease(layer); 
} 

これは技術的に私の初めてのiPhoneコードです(私はMacのみのプログラムなので)。私は以前はCGLayerを使っていましたが、私が知る限り、QuartzはiPhone上で違いはありません。

...とUIImageとして返します。

私はUIKitを使ったことがないので、この部分のやり方はわかりません。

+0

destinationContextはどこから来たのですか?私はちょうどこれのような新しいものを宣言しますか?CGContextRef destinationContext; – willc2

+0

宛先のコンテキストは、レイヤーを描画するコンテキストです。目的地のコンテキストを自分で作成していないと仮定すると、 'UIGraphicsGetCurrentContext'を呼び出してコンテキストスタックから取得します。 –

+0

もちろん、ビューで描画する代わりにUIImageを作成する場合は、おそらくコンテキストを自分で作成します。ビットマップコンテキストを作成して描画し、そのバッファを使用してUIImageを作成するCGImageを作成します。 (これを行う簡単な方法があります) –

関連する問題