私は少し混乱しており、誰かが問題に光を当ててくれることを願っています. 画像配列から水平線を削除し、水平線なしで画像配列を返す関数を作成しました。しかし、この関数を画像配列で呼び出すと、渡した画像配列も直接変更されます。なぜこれが起こるのですか?
例
int[][] imageArray = ImageToArray();
int[][] _NoLines = RemovedLines(imageArray);
imageArray
まだその行が正しいはずですか?
これは、誰かが興味を持っている場合の実際の関数です:
public int[][] RemovedLines(int[][] _baseImage)
{
int width = _baseImage[0].length, height = _baseImage.length;
int white = 0;
int black = 0;
for (int y = 0; y < height; y++) {
white = 0;
black = 0;
for (int x = 0; x < width; x++) {
if(_baseImage[y][x] == 0xFFFFFFFF){
white++;
}else{
black++;
}
}
if(black > white)
{
// line detected fist time
// now get height of line
int _starts = y;
_starts++;
int _end = 0;
for(; _starts < height; _starts++){
white = 0;
black = 0;
for(int _x = 0; _x < width; _x++){
if(_baseImage[_starts][_x] == 0xFFFFFFFF){
white++;
}else{
black++;
}
}
if(white > black){
// end of line height
_end = _starts;
_starts = y;
break;
}
}
white = 0;
black = 0;
for(;_starts < _end; _starts++){
for(int line = 0; line < width; line++){
if(_baseImage[_starts-1][line] != 0xFF000000
&& _baseImage[_starts-2][line] != 0xFF000000
|| _baseImage[_starts+1][line] != 0xFF000000
&& _baseImage[_starts+2][line] != 0xFF000000){
_baseImage[_starts][line] =0xFFFFFFFF;
}
}
}
y = _end;
}
}
return _baseImage;
}