将双脚本灰度int值数组转换为BufferedImage

时间:2015-04-24 23:42:27

标签: java bufferedimage

所以经过几个小时的搜索后,我准备把头发拉出来了。

我在计算机视觉方面做了一些研究,正在处理灰度图像。我需要得到一个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是正确的。

我做错了什么?我确定这是显而易见的,但任何帮助都表示赞赏,因为我无法看到它。也许我对模型的假设是错误的?

谢谢, 慢性

0 个答案:

没有答案