我完全失去了这项任务,任何帮助都会受到赞赏!我正在阅读PGM图像并对其进行更改。我已经编写了一些代码来增加它的亮度,但我不知道如何裁剪它。
我提供了一个示例代码:
public static short[][] brighten(short[][] orig, short amount) {
short[][] returnArray = new short[orig.length][orig[0].length];
for(int i = 0; i < orig.length; ++i){
for(int j = 0; j < orig[0].length; ++j){
returnArray[i][j] = (short)(orig[i][j]+amount);
}
}
return returnArray;
}
所以我试图使用这样的东西,但它似乎也不起作用:
public static short[][] crop(short[][] orig, int ULx, int ULy, int >LRx, int LRy) {
short[][] returnArray = new short[orig.length][orig[0].length];
for (int i = ULx; i <= LRx; i++) {
for (int j = ULy; j <= LRy; j++){
returnArray[i][j] = (short)(orig[i][j]);
}
}
return returnArray;
}
有什么建议吗?
答案 0 :(得分:0)
只需使用嵌套的for
循环,就像在明亮的示例中一样,但只复制某些值:
相同的概念适用于垂直裁剪。
这是我修改后的代码 - 这次是用Java代码:)
short[][] returnArray = new short[orig.length][orig[0].length];
int ReturnArrayX=0, ReturnArrayY;
for (int i = ULx; i <= LRx; i++)
{
ReturnArrayY=0;
for (int j = ULy; j <= LRy; j++)
{
returnArray[ReturnArrayX][ReturnArrayY] = (short)(orig[i][j]);
ReturnArrayY++;
}
ReturnArrayX++;
}
return returnArray;
这可能不是最有效的方法,但是它完成了,并且很清楚地理解:)
基本上,你有两个变量迭代原始数组“像素”,另外两个变量迭代这些变量的目的地 - 原始变量可能从5开始从5像素开始裁剪,但是这些新变量2变量,它们将从结果数组中的(0,0)开始插入。添加像素后,目标变量就会更新。
重要提示:再一次,您可能需要调整变量循环的顺序。我没有测试过这段代码,所以我不知道它是如何工作的。理论是存在的,但实际可能不是。只是让它运行,看它是否旋转图片 - 如果有,你需要切换两个变量。
希望这有帮助,
hnefatl