2011-01-11 30 views
1

同じグラフィックを複数回タイリングすることによって作成したビットマップがあります。ビットマップが作成されると、特定の基準に基づいてタイルが色付けされます。c#winforms GDI +

ビットマップがロードされると、私はさらに、あらかじめ定義された基準に基づいてタイルの色を変更するオプションをユーザに与えたいと考えています。したがって、私は現在のビットマップを破棄し、新しい色で再度生成し、パネルに貼り付ける必要がありますか?または、各タイルのビットマップを繰り返して色を変えることはできますか?

ありがとうございました。

答えて

1

ユーザーがタイルの色を変更する頻度によって異なります。彼らがそれをあまり頻繁にやっていなければ、おそらくあなたのコードがこのシナリオに合わせて最適化されているように見えるので、新しいビットマップを生成するほうが簡単でしょう。

ただし、Bitmap.LockBits/UnlockBitsメソッドを使用してビットマップ内のピクセルデータを取得し、ピクセルデータを直接操作する方がパフォーマンスが向上します。これを行う方法のサンプルについては、Bitmap.LockBitsメソッド(http://msdn.microsoft.com/en-us/library/5ey6h79d.aspx)にあるMSDNのドキュメントを参照してください。

+0

http://www.bobpowell.net/lockingbits.htmは、代わりに「安全でない」コードを使用したい場合にチェックアウトする価値があります(少し速くなります)。 – Josh

+0

はい、ビットマップ上のピクセル単位の操作のパフォーマンスを向上させる方法があります。しかし、単純にビットマップを再生成するよりも速くなると想定する理由はありません。 –

+0

私は、GCがどれくらいのメモリ圧迫を受けているか、画像のどれくらいを変更する必要があるかによって異なります。イメージ内のいくつかの位置だけを変更する必要がある場合は、おそらくピクセルデータを変更する方がよいでしょう。変更によって画像コンテンツの大部分が変更された場合、ビットマップの再生成が高速になる可能性があります。ありがとうございました。 – Josh

1

あなたがビットマップを調べて色を変える唯一の方法は、ピクセル単位で行うことです。ユーザーが新しい色を選択したときにビットマップを最初から生成するのがベストショットです。

+1

これは正しいです。ビットマップは、空間的にマップされたピクセルの配列です。画像に追加した「タイル」の概念はありません。 1つのタイルのピクセルを再描画し、マルチタイルのグラフィックをもう一度再作成します。前のビットマップが不要になったときは、そのビットマップを破棄してください。 –