I had a bufferedImage image with data {0; 24; 40; 0; 12; 28; 11; 37;....} and i saved it to a file with code:
File file = new File(filename);
BufferedImage image = ImageIO.read(file);
String ext = "jpg";
try
{
file.delete();
ImageIO.write(image,ext,file);
return true;
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,
"Image could not be saved!","Error",JOptionPane.ERROR_MESSAGE);
return false;
}
but when i read it then, data has been changed. imgBytes = {2; 25; 41; 0; 13; 29; 12; 35; ...}
Can you help me make the data when write it as jpg, that data is not changed.
Thanks very much!
code read
private void read()
{
img = ImageIO.read(file);
BufferedImage image = copyToBuffer(img);
imgBytes = getImageBytes(image);
}
private BufferedImage copyToBuffer(BufferedImage image)
{
BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
Graphics2D graphics = newImage.createGraphics();
graphics.drawRenderedImage(image, null);
graphics.dispose();
return newImage;
}
private byte[] getImageBytes(BufferedImage image)
{
WritableRaster raster = image.getRaster();
DataBufferByte buffer = (DataBufferByte)raster.getDataBuffer();
return buffer.getData();
}
Can you help me make the data when write it as jpg, that data is not changed.
Nope, impossible to use JPG. Even 100% quality JPG is lossy. You will have to go for PNG or something else non-lossy.