2016-07-11 10 views
2

Die Streuungsmethode verwendet das Originalbild und streut seine Pixel. Das Programm funktioniert gut, wenn ich mehrere Zeilen Code anstelle der Methode "randomSelect" verwenden. Das Programm scheint in eine Endlosschleife zu gehen und das Bild ändert sich nicht, wenn ich die Methode "randomSelect" verwende.Warum funktioniert mein Programm nicht, wenn ich die "randomSelect" -Methode zum Ersetzen mehrerer Codezeilen verwende

void scatter(GBufferedImage &img, Grid<int> original, int row, int col) { 
    int degree; 
    while (true) { 
     degree = getInteger("Enter degree of scatter [1-100]: "); 
     if (degree >=1 && degree <= 100) break; 
    } 

    Grid<int> newImg(row, col); 


    for (int i = 0; i < row; i++) { 
     for (int j = 0; j < col; j++) { 

     /* int newRow = -1; 
      int newCol = -1; 
      while (!original.inBounds(newRow, newCol)) { 
       newRow = randomInteger(max(i - degree, 0), min(i + degree,original.numRows())); 
       newCol = randomInteger(max(j - degree, 0), min(j + degree,original.numRows())); 
      } 
      newImg[i][j] = original[newRow][newCol]; */ // work properly 

     newImg[i][j] = randomSelect(original, i , j, degree); // do not work 

     } 
    } 

    img.fromGrid(newImg); 
} 



int randomSelect(Grid<int> original, int i, int j, int degree) {  // do not work 
    int newRow = -1; 
    int newCol = -1; 
    while (!original.inBounds(newRow, newCol)) { 
     newRow = randomInteger(max(i - degree, 0), min(i + degree,original.numRows())); 
     newCol = randomInteger(max(j - degree, 0), min(j + degree,original.numRows())); 
    } 

    return original[newRow][newCol]; 
} 
+1

Sie wollen wahrscheinlich 'Grid original' durch einen Verweis:' Grid & original'. –

+0

Es funktioniert. Aber warum kann ich keine Kopie des Originals weitergeben? –

Antwort

2

Sie sollten ursprünglich als Referenz übergeben:

int randomSelect(Grid<int>& original, int i, int j, int degree) {  // will work 
+0

Es funktioniert. Aber warum kann ich keine Kopie des Originals weitergeben? –

+0

@ZuweiShui Ich bin mir nicht sicher, ob und wie der Kopierkonstruktor von Grid implementiert. Dennoch ist es effizienter, eine Referenz zu übergeben. –

+0

Also, der Grund meines Programms scheint in eine Endlosschleife zu gehen und das Bild ändert sich nicht, wenn ich die Kopie des Originals passiere, ist der Mangel an Effizienz. Ist das richtig? –

Verwandte Themen