2015-12-04 17 views
5

Sto provando a eseguire codice leggermente modificato da un articolo MSDN come parte di un progetto scolastico. L'obiettivo è usare una colormatrice per ricolorare una bitmap in una finestra di immagine. Qui è il mio codice:C# ColorMatrix Index fuori limite

 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); 

dove Scala R, gScale e bScale sono carri con valori da 0.0f a 1. L'articolo originale di MSDN è qui: https://msdn.microsoft.com/en-us/library/6tf7sa87%28v=vs.110%29.aspx

Quando si arriva fino all'ultima riga, "ColorMatrix colorMatrix = new ..." il mio codice raggiunge un errore di runtime. Nel debugger, ottengo colorMatrixElements come float [4] []. Come se non fosse un array 4x4. Ho sbagliato qualcosa nel mio lavoro di copia-incolla o sto semplicemente non capendo come C# gestisce gli array 2D?

Grazie per l'aiuto.

risposta

4

Per la stessa pagina a cui ci si collega, è necessario passare una matrice 5 per 5 a tale costruttore. Stai passando un array 4 per 4, quindi naturalmente ottieni IndexOutOfBoundsException.

Prova

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

che ha funzionato bene. Ci vorrà un po 'di manomissione nello schema più ampio del mio progetto per fare ciò che devo fare, ma ora compila. Grazie per la risposta! – Micah

Problemi correlati