2015-12-04 12 views
5

私は、学校プロジェクトの一部として、MSDNの記事から若干修正されたコードを実行しようとしています。目標は、カラーボックスを使用してピクチャボックス内のビットマップを再描画することです。ここに私のコードは次のとおりです。C#ColorMatrix Index of Bounds

rScale、gScale、およびBSCALEは、元のMSDNの記事はこちらは0.0fから1の値を持つ浮動小数点数です
 float[][] colorMatrixElements = { 
     new float[] {rScale, 0, 0, 0},   
     new float[] {0, gScale, 0, 0},   
     new float[] {0, 0, bScale, 0},   
     new float[] {0, 0, 0, 1}}; 

     ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements); 

https://msdn.microsoft.com/en-us/library/6tf7sa87%28v=vs.110%29.aspx

それが最後の行に降りるとき、 "ColorMatrix colorMatrix = new ..."私のコードはランタイムエラーを起こします。デバッガでは、colorMatrixElementsをfloat [4] []として取得します。 4x4配列でないかのように。私はコピーペーストの仕事で何かをボットしたのですか、あるいはC#が2D配列をどのように扱うかを理解していませんか?助けのための

感謝。

答えて

4

リンク先のページに、5 by 5の配列をそのコンストラクタに渡す必要があります。あなたは4行4列の配列を渡しているので、当然IndexOutOfBoundsExceptionが得られます。

はうまくいった

float[][] colorMatrixElements = { 
    new float[] {rScale, 0, 0, 0, 0},   
    new float[] {0, gScale, 0, 0, 0},   
    new float[] {0, 0, bScale, 0, 0},   
    new float[] {0, 0, 0,  1, 0}, 
    new float[] {0, 0, 0,  0, 1} 
     }; 

    ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements); 
+0

を試してみてください。私の必要とすることをやるためのプロジェクトの大きなスキームでは少し変なところがありますが、今コンパイルされています。答えをありがとう! – Micah