Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ImageIO.read()时颜色发生变化_Java_Image_Swing_Javax.imageio - Fatal编程技术网

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)之后我们将能够更好地帮助你:)好运气这是我一直在寻找的答案,我们需要在输入和输出图像中使用相同的类型