所以经过几个小时的搜索后,我准备把头发拉出来了。
我在计算机视觉方面做了一些研究,正在处理灰度图像。我需要得到一个Sobel过滤双值的“图像”(双脚本双阵列)。我的Sobel转换器设置为接受双脚本int数组(int [] [])并从那里开始。
我正在读取缓冲图像,并通过一种方法收集灰度int值,我99%肯定能够完美地工作(如果需要,我可以提供它)。
接下来我试图通过以下方法将这个int值矩阵转换为BufferedImage:
private BufferedImage getBIFromIntArr(int[][] matrix){
BufferedImage img = new BufferedImage(matrix.length * 4, matrix[0].length, BufferedImage.TYPE_INT_ARGB);
- Gather the pixels in the form of [alpha, r, g, b]
- multiply the size of the array by 4 for the model
int[] pixels = new int[(matrix.length * 4 * matrix[0].length)];
int index = 0;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
int pixel = matrix[i][j];
pixels[index] = pixel;
index++;
for (int k = 0; k < 3; k++) {
pixels[index] = 0;
index++;
}
}
}
-get the raster
WritableRaster raster = img.getRaster();
-output the amount of pixels and a sample of the array
System.out.println(pixels.length);
for (int i = 0; i < pixels.length; i++) {
System.out.print(pixels[i] + " ");
}
- set the pixels of the raster
raster.setPixels(0, 0, matrix.length, matrix[0].length, pixels);
- paint the image via an external routing to check works (does not)
p.panel.setNewImage(img);
return img;
}
这是我的理解。 ARGB类型包括4个值Alpha,Red,Green和Blue。我猜测将新BufferedImage中的alpha值设置为灰度图像int值(传入的矩阵值)然后这将重现图像。如果我错了,请纠正我。所以你可以看到我创建了一个像素数组,这些像素存储像这样的int值:[intValue,0,0,0]重复尝试保持4值模型。
然后我创建一个可写光栅并使用聚集的像素在其中设置聚集的像素。唯一的问题是我在BufferedImage中什么都没得到。下面的代码没有错误,我确定我的indeces是正确的。
我做错了什么?我确定这是显而易见的,但任何帮助都表示赞赏,因为我无法看到它。也许我对模型的假设是错误的?
谢谢, 慢性