2012-01-21 7 views
0

これをグレースケールにするには?C#.NETとWindows Formsのグレースケール写真

私ができることは、画像の色合いを変えることです(コードには緑色です)。どうしたらいいですか?

これはあなたのより良いグレースケール画像を取得する必要がありますので、あなたはHSBを調整している効果で
byte[] redGreenBlueVal = new byte[numBytes]; 

for (int i = 0; i < redGreenBlueVal .Length; i += 4) 
{ 
    redGreenBlueVal [i + 0] = (byte)(.114 * redGreenBlueVal [i + 0]); --> blue 
    redGreenBlueVal [i + 1] = (byte)(.587 * redGreenBlueVal [i + 1]); --> green 
    redGreenBlueVal [i + 2] = (byte)(.299 * redGreenBlueVal [i + 2]); --> red 
} 
+0

可能な複製[parallel openmp c#](http://stackoverflow.com/questions/2038865/parallel-openmp-c-sharp) –

+1

OutOfBounds例外を受け取っても驚かないでください。 –

答えて

3

: 30%RED 59%11%BLUE GREEN

byte[] redGreenBlueVal = new byte[numBytes]; 

for (int i = 0; i < redGreenBlueVal .Length; i += 4) 
{ 
     gray = (byte)(.11 * redGreenBlueVal [i + 0]); 
     gray += (byte)(.59 * redGreenBlueVal [i + 1]); 
     gray += (byte)(.3 * redGreenBlueVal [i + 2]); 

     redGreenBlueVal [i + 0] = gray; 
     redGreenBlueVal [i + 1] = gray; 
     redGreenBlueVal [i + 2] = gray; 

} 
+0

申し訳ありませんこれはまさに私のコードで持っているものです... – BigBug

+0

私は自分のコードを間違ってコピーしました。申し訳ありません、ただ編集しました(私はObjective Cで書かれたiOSアプリケーションからこれを取っていますので、あなたのために 'グレー'変数を定義していませんでした...) –

+0

いくつかのドキュメントを表示できますか?それが正しいとは思えません。たとえば、255,255,255 [WHITE]は '76.5、150.45、28.05 [NOT WHITE]'になります。 –

1

あなたは、各ピクセルの色を設定してみてください可能性がありチャネルをその画素の平均値に変換する。

すなわち

for(int i = 0; i < redGreenBlueVal.Length; += 4) 
{ 
    int average = (redGreenBlueVal[i + 0] + redGreenBlueVal[i + 1] + redGreenBlueVal[i + 2])/3; 
    redGreenBlueVal[i + 0] = average; 
    redGreenBlueVal[i + 1] = average; 
    redGreenBlueVal[i + 2] = average; 
} 
+0

これはうまくいかないので、私はそれがどのように投票したのか疑問に思っています。 –

+0

redGreenBlueValはバイトで、あなたはオーバーフローします。平均を計算する前に、おそらくintに変換する必要があります。 – Tibi

+1

申し訳ありませんが、これはうまくいかないことは明らかです。 (RGB)0,0,255および(RGB)255​​,0,0および(RGB)0,255,0は、3つすべてが確かに正しくない同じグレー色になります。平均が明るさに影響し、うまくいかないことを理解するには、HSB/RGB計算を見る必要があります –

0

グレースケール画像を得るために、基本的な考え方は、すべての3つのチャンネルが同じ値を保持させることです。これを行うには多くの方法がありますが、最も簡単なものは以下のとおりです。

  • 使用チャンネルの一つだけ(Photoshopで個々のチャンネルを選択すると、それは次のようになります)
  • は、3つのチャンネルの平均値を計算