我正在尝试从外部目录中读取图像,并且我正在使用
bufferedImage image=ImageIO.read(new File(imagefile));
jlabel.seticon(new imageicon(image));
并且颜色发生了巨大变化。我尝试过很多其他的事情:
bufferedImage image=ImageIO.read(new File(imagefile));
bufferedImage img=new bufferedImage(image.getWidth(),image.getHeight(),bufferedImage.TYPE_INT_RGB);
我试过了:
img.setData(image.getData();
jlabel.seticon(new imageicon(image));
我试过了:
Iterator readers = ImageIO.getImageReadersByFormatName("JPEG");
ImageReader reader = null;
while(readers.hasNext()) {
reader = (ImageReader)readers.next();
if(reader.canReadRaster()) {
break;
}
}
ImageInputStream input = ImageIO.createImageInputStream(f);
reader.setInput(input);
Raster raster = reader.readRaster(0, null);
BufferedImage bi = new BufferedImage(raster.getWidth(), raster.getHeight(),
BufferedImage.TYPE_4BYTE_ABGR);
bi.getRaster().setRect(raster);
但结果仍然相同 http://i.stack.imgur.com/jNVm0.jpg
以下是此问题的示例:
查看的最小代码是:
bufferedImage image=ImageIO.read(new File(imagefile));
jlabel.seticon(new imageicon(image));
lbitem.setIcon(im);
并存储
File f = new File(s);
long size=f.length();
FileInputStream fis1=new FileInputStream(f);
FileOutputStream fos2=new FileOutputStream("src/image/"+tfpn.getText()+".jpg");
byte b[]=new byte[1000];
int r=0;
long count=0;
while(true)
{
r=fis1.read(b,0,1000);
fos2.write(b,0,1000);
count = count+r;
if(count==size)
break;
System.out.println(count);
}
什么可能导致糟糕的颜色?
答案 0 :(得分:1)
此问题是由于读取/写入(创建/使用)图像之间的不匹配造成的 包含alpha(透明度)但你期望它不包含alpha(或反向)。 例如,如果您的图像是BufferedImage.TYPE_4BYTE_ABGR并输出它 到不支持alpha(透明度)的文件类型,或者你的编写器没有 支持alpha,阅读并显示后,它看起来就像你的样本。
使用PNG类型(支持Alpha通道)而非JPG(不支持Alpha通道)