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];
}
Sie wollen wahrscheinlich 'Grid original' durch einen Verweis:' Grid & original'. –
Es funktioniert. Aber warum kann ich keine Kopie des Originals weitergeben? –