scatterメソッドは元の画像を取り込み、そのピクセルを散布します。 メソッド "randomSelect"ではなく、複数行のコードを使用するとプログラムがうまく動作します。プログラムは無限ループになるようです "randomSelect"メソッドを使用するとイメージは変わりません。"randomSelect"メソッドを使用して複数行のコードを置き換えたときにプログラムが機能しないのはなぜですか?
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];
}
おそらく、参照することにより'グリッド original'を通過したいです。 –
それは動作します。しかし、なぜ私はオリジナルのコピーを渡すことができないのですか? –