【问题标题】:Change in color while using ImageIO.read()使用 ImageIO.read() 时改变颜色
【发布时间】:2014-05-17 13:02:00
【问题描述】:

我正在尝试从外部目录读取图像,为此我正在使用

               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);
            }

颜色不好的原因是什么?

【问题讨论】:

  • 我想知道您的问题是否是您使用了错误的颜色模型。我想你会想看看这两个 SO 问题的答案:1)Java CMYK to RGB with profile. Output is too dark 2)Problem reading JPEG image using ImageIO.read(File file)
  • 你能提供我解决这个问题的代码吗
  • 没有。您甚至没有表明您已经尝试过链接中的任何内容。请阅读链接,尝试他们的解决方案,看看它们是否适用。如果他们不这样做并且您仍然需要帮助,那么您将需要创建并发布您的minimal code example program 以供我们审查、测试并可能修复。您还需要发布您的图片,包括原始图片和无效图片。
  • 见鬼,这甚至不是你的形象!你从here 借来的。请停止浪费我们的时间,并显示指向真实图像的链接并发布您的最小代码。
  • 正如@HovercraftFullOfEels 所说1) 阅读他提供的链接并尝试它们; 2) 如果这不符合您的需求,请阅读气垫船也提供的this link3) 执行该链接所说的操作并 4) 在那之后,我们将更有能力帮助你:) 祝你好运

标签: java image swing javax.imageio


【解决方案1】:

这个问题是由于读/写(创建/使用)图像不匹配造成的 包含 alpha(透明度)但您期望它不包含 alpha(或相反)。 例如,如果您的图像是 BufferedImage.TYPE_4BYTE_ABGR 并且您将其输出 到不支持 alpha (transparency) 的文件类型,或者您的作者不支持 支持 alpha,它会在阅读和显示后看起来像您的示例。

使用类型 PNG(支持 alpha 通道)而不是 JPG(不支持 alpha 通道)

【讨论】:

  • 这是我一直在寻找的答案,我们需要在输入和输出图像中使用相同的类型
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2012-07-10
  • 2023-01-29
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多