Java 使用ImageIO.read()时颜色发生变化
我正在尝试从外部目录读取图像,为此我正在使用Java 使用ImageIO.read()时颜色发生变化,java,image,swing,javax.imageio,Java,Image,Swing,Javax.imageio,我正在尝试从外部目录读取图像,为此我正在使用 bufferedImage image=ImageIO.read(new File(imagefile)); jlabel.seticon(new imageicon(image)); 还有颜色的剧烈变化。我尝试了很多其他的方法,比如: bufferedImage image=ImageIO.read(new File(imagefile));
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);
我试着:
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);
但结果仍然是一样的
以下是问题的一个例子:
查看的最低代码是:
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);
}
什么可能导致颜色不好?此问题是由于读取/写入(创建/使用)图像之间不匹配造成的 包含alpha(透明度),但您希望它不包含alpha(或相反)。 例如,如果您的映像是BuffereImage.TYPE_4BYTE_ABGR并将其输出 指向不支持alpha(透明度)的文件类型,或者您的writer不支持 支持alpha,在读取和显示后,它将看起来像您的示例
使用类型PNG(支持alpha通道)而不是JPG(不支持alpha通道)我想知道您的问题是否是使用了错误的颜色模型。我想你会想看看这两个问题的答案:1)2)你能为我提供解决这个问题的代码吗。你甚至没有表示你尝试过链接中的任何内容。请阅读链接,尝试他们的解决方案,看看它们是否适用。如果他们不这样做,而您仍然需要帮助,那么您需要创建并发布您的日志,以便我们进行审查、测试,并可能进行修复。你还需要发布你的图片,包括原始图片和不起作用的图片。该死,那甚至不是你的图片!你从我这儿借的。请停止浪费我们的时间,显示一个指向真实图像的链接,并发布您的最小代码。正如@HovercraftFullOfEels所说的1)阅读他提供的链接并尝试;2) 如果这不符合你的需要,那么请阅读提供的气垫船,3)按照链接上的说明去做,4)之后我们将能够更好地帮助你:)好运气这是我一直在寻找的答案,我们需要在输入和输出图像中使用相同的类型