我试图在图像上实现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];
}
}