2

最終的には、iPhone で使用するボックス ブラー機能に取り組んでいます。

その関数は UIImage を受け取り、最初に側面に透明なコピーを描画し、次にその画像を取得して上下に透明なコピーを描画し、きれいにぼやけた画像を返します。

Drawing with Quartz 2D Programming Guideを読むと、この種の操作には CGLayers を使用することが推奨されます。

ガイドのサンプル コードは、私が理解するには少し複雑なので、UIImage を取得してCGLayerに変換し、そのコピーを描画して UIImage として返すという非常に簡単な例を誰かに示してもらいたい思います

値がハードコーディングされていても問題ありません (簡単にするため)。これは、製品コードではなく、頭を包むためだけのものです。

4

1 に答える 1

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 を使用したことがないため、この部分を行う方法がわかりません。

于 2009-08-17T18:39:09.767 に答える