将图像转换为字节数组,然后转换为int数组,然后转换为字节数组以进行图像输出

时间:2016-02-05 15:38:39

标签: java arrays image rendering

我试图在图像上实现DCT,到目前为止,我只能成功读取图像,将其灰度化,将其转换为字节数组,然后将字节数组输出为图像。这很好用。但是,为了处理图像,我需要将字节数组转换为int数组然后再转回,这就是问题所在。

第一部分读取图像并将图像转换为灰度。

$mdDialog.hide(info);

此部分将图像转换为字节数组。

BufferedImage image = ImageIO.read(new File("C:\\Users\\A00226084\\Desktop\\image.jpg"));

int width = image.getWidth();
int height = image.getHeight();

for(int i=0; i<height; i++){

    for(int j=0; j<width; j++){

        Color c = new Color(image.getRGB(j, i));
        int red = (int)(c.getRed() * 0.299);
        int green = (int)(c.getGreen() * 0.587);
        int blue = (int)(c.getBlue() *0.114);
        Color newColor = new Color(red+green+blue,

        red+green+blue,red+green+blue);

        image.setRGB(j,i,newColor.getRGB());
    }
}

然后,该部分将字节数组转换为int数组。我已手动完成包装,因为没有其他工作。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos);
byte[] pixels = baos.toByteArray();

这部分将int数组转换回字节数组,位于字节&gt;之间。 int和int&gt;一切都出错的字节转换。我已经将前后字节数组输出到文件中并且它们是相同的,所以我不知道为什么我会得到&#39; image == null&#39;而不是图像。

for(int i = 0; i < pixels.length; i ++){
    if(pixels[i] < 0){
        byteConverted[i] = 127 + (128 - (pixels[i] * -1));
    }else{
        byteConverted[i] = pixels[i];

    }
}

0 个答案:

没有答案