我正在寻找2D阵列中的相邻像素。使用一个欧几里德距离的公式和一个任意数字,我想确定像素pix1和相邻像素pix2之间的“色差”是否大于65。如果是,请将相邻像素pix2更改为黑色,否则请更改为白色。现在,我意识到一个像素在2D阵列中最多可以有8个邻居。
为此,我得到了其他.java文件,它们提示您选择任何图像,并使用我编写的此程序,将根据提到的“色差”输出黑白图像。
尽管执行效率很低,但我实现了一系列if语句来检查2D数组中的边界,但是我似乎找不到一个错误。
编辑:不再越界,但指针错误为空。
当我放弃退货声明时。
export default class Child extends React.Component {
constructor() {
super();
this.state = {
options: []
};
}
static getDerivedStateFromProps(nextProps, prevState) {
let { data } = nextProps;
let options = Object.keys(data).reduce((acc, curr) => {
return [...acc, { label: data[curr], value: curr.replace( /^\D+/g, '') }]
}, []);
//or
/*
let options= Object.keys(nextProps.data).map((key, index) => ({label: nextProps.data[key], value: index}))};
*/
return { options };
}
render() {
return (
this.state.options.map(item => <p key={item.value}>{item.label}</p>)
);
}
}
我不知道它应该返回什么,我只想改变像素的颜色。清楚地对象是我理解不足的区域。
另外,当添加一个return语句:“ return result”时,我得到一个空指针异常,该异常引用其他Java文件
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
This method must return a result of type Color[][]
更新的代码:
Exception in thread "main" java.lang.NullPointerException
at ImageConverter.arrayToBufferedImage(ImageConverter.java:45)
at ImageWriter.writeImage(ImageWriter.java:16)
at ImageProcessing.processImage(ImageProcessing.java:164)
at ImageProcessing.main(ImageProcessing.java:186)
}
答案 0 :(得分:1)
可以遍历相邻使用2嵌套for循环像以下8个像素
.then(function(data) {
data.messages = data.messages.slice(Math.max(data.messages.length - 10, 0))
for (var i = 0; i < data.messages.length; i++) {
var time = Math.round(new Date().getTime() / 1000);
if (data.messages[i].time < time) {
console.log(data.messages[i].message);
}
}
});
或者甚至更简单的选择是存储存储坐标偏移量等for (int i = 0; i < numberOfRows; i++)
for (int j = 0; j < numberOfColumns; j++) {
for(i1 = -1; i1 <= 1; i1++) {
for(j1 = -1; j1 <= 1; j1++) {
if(!(i1 == 0 && j1 == 0) && i + i1 >=0 && i + i1 < numberOfRows && j + j1 >= 0 and j + j1 < numberOfColumns) {
pix2 = imagingArray[i+i1][j+j1];
}
}
}
}
}
(我让你找出其余4个偏移)
答案 1 :(得分:0)
该错误可能发生在代码中的多个位置,您在此处检查上限。 例如:
if (i < numberOfRows && j>0) {
pix2 = imagingArray[i+1][j];//to the right of current pixel
这里i
可以等于numberOfRows-1
,然后当您尝试访问i+1
时,您将得到上述异常
您需要记住,数组索引从0
到length-1
答案 2 :(得分:-1)
我建议您不要在if语句(例如if (j > 0)
)中包围每个“模块”,而应将它们围在try-catch中。这意味着它是不可能收到IndexOutOfBoundsException
。这样做看起来像这样:
try {
if (i < numberOfRows) {
// ..do whatever you did here
}
} catch (IndexOutOfBoundsException e) {
// do nothing because you hit the edge
}
对每个if语句执行此操作,它应该可以工作。
希望这会有所帮助!
编辑:这样做,这样具有容易看到发生异常的地方,如果你想另一个振作。只需将e.printStackTrace()
放在受影响的catch
块中即可。