2

不透明度を持つ UIImage でフラッドフィルを実行しようとしています。CG(http://en.wikipedia.org/wiki/Flood_fill)で 4-Way フラッドフィルを実装しようとしましたが、ピクセルの色を読み取ってピクセルに色を付けるのが遅すぎます。300x100 ピクセルの領域を埋めるには 1 分以上かかります。次のような関数が必要です。

-(UIImage*)floodFillOnImage:(UIImage*)image fromPoint:(CGPoint)start;

それは十分に速いです。

UIImagesで動作するObjective-Cのフラッドフィルアルゴリズムの実用的な実装を持っているか、アイデアを持っている人はいますか? いくつかの iOS 描画アプリで、このようなペイント バケツ ツールを見たことがあります。

4

2 に答える 2

6

300×100 の画像を塗りつぶすのに 1 分以上かかる場合は、ピクセル値の取得と設定の実装が非常に非効率的である可能性があります。画像をビットマップ コンテキストに描画し、ピクセル データに直接アクセス (および変更) すると、はるかに高速になります。

基本的なアプローチは、メモリ バッファ (4 (rgba) × 幅 × 高さバイトの C 配列) を割り当て、それを に渡しCGBitmapContextCreate、ソース イメージをコンテキストに描画し (たとえば、 を使用CGContextDrawImage)、バッファを直接操作することです (ピクセル値)。完了したら、 を使用してコンテキストからイメージを作成できますCGBitmapContextCreateImage

于 2013-01-17T19:22:12.957 に答える
1

不透明度を持つ UIImage でフラッドフィルを実行しようとしています。

クリアな領域を埋めようとしていますか?もしそうなら、はるかに簡単な解決策があります: コンテキストを作成し、それを目的の色で塗りつぶし、その上に画像を描画してから、完成した画像をコンテキストから抽出します。

明確でない領域を塗りつぶそうとしている場合は、そのための解決策もあります。コンテキストを作成し、最初に画像を描画し、コンテキストのブレンド モードをsource inに設定し、色で塗りつぶしてから、完成画像を抽出します。

于 2013-01-18T05:59:20.870 に答える