2016-12-28 11 views
0

私は#000(黒)と#FFF(白)のピクセルだけで(何もありません)おかげで描画したい256のグレーレベルの画像を持っています。そのようなアルゴリズムでは、ブラーのソートが領域内の画素(私のために白と黒)の数を増加させることによって行われるhttps://upload.wikimedia.org/wikipedia/commons/6/6d/Dithering_example_red_blue.pngディザリングを使用して白黒ピクセルだけのグレー画像を表示するにはどうすればよいですか?

:これを行うために

一つの方法は、ディザリングを使用することです。

しかし、どのように実装するのかわかりません:どのように必要な灰色のレベルを表すピクセル数を決定できますか? あなたはそのようなアルゴリズムを書くことができますか(擬似コードを使用するか、Java、Scala、C、C++など)?

+0

これをご覧くださいhttp://stackoverflow.com/a/36820654/2521214白黒の2色からなるパレットのみを使用してください。 – Spektre

答えて

1

ディザリングを作成するアルゴリズムにはさまざまなものがありますが、私の好きなものはランダムで、簡単に実装でき、繰り返しパターンはなく、フレームごとにイメージを再ディザリングすれば、

まず、重要な、しばしば無視される部分は、256階調をsRGB(ガンマ圧縮)値からリニア(ガンマ非圧縮)値に変換することです。そうでなければWikipediaのDither記事の例のように、明るい。変換を行うには、256エントリールックアップテーブルを使用し、線形値を0から4095にします。

linear_value < (rand()&4095) ? 0 : 255を使用してディザリングを設定するだけで、これは0と4095の間のランダムな値をあなたの黒または白のピクセルを与えます。したがって、linear_valueを3072(非常に明るい灰色)とし、4のうち3回は白いピクセルを、41(濃い灰色)の値では100のうち99倍の黒を取得します。

+0

ガンマ補正レベルから変換することの重要性を認識してくれたことをお祝いして、私は無知でしたその問題は何年も続いています。ランダムディザリングは汚れがシンプルですが、乱数生成が遅いために遅くなり、醜い結果をもたらします。私はFloyd-Steinberg自身、またはその多くの変種の一つを好む。純粋なランダムノイズと高周波ノイズの違いについては、http://math.stackexchange.com/questions/2136099/restore-range-and-uniform-distribution-to-modified-random-numbersを参照してください。 –

+0

マークしないでください?あなたはほぼ4年前にそれを速くするための私のテクニックを見た:D http://stackoverflow.com/questions/15793747/how-to-best-display-30-bpp-graphics-on-a-24-bpp-display/ 15793794#15793794 –

関連する問題