参见英文答案 > IllegalArgumentException: Numbers of source Raster bands and source color space components do not match For a color image Exception1
当我尝试使用以下代码阅读图像
myPicture = ImageIO.read(new File("./src/javaassignment1b/Deck/Ace_Diamond_1.jpg"));

我收到以下错误

Numbers of source Raster bands and source color space components do not match

在研究中,有一个类似的question,它似乎是我的JPEG图像的一个问题(它是从更大的图片裁剪可能导致错误),我必须解决灰度问题,我不知道是什么关于或如何实现它.

注意:起初我试图使用ImageIcon添加到JPanel,但它无法工作,因此我发现这个solution导致我目前的问题.我刚开始用Java编程.

编辑:这里是link的图像,我正在做一个Java应用程序

我需要一个替代方法来将图像添加到JPanel.

解决方法

使用任何图像查看器/编辑器打开图像,并将其保存为“标准”格式

我不知道图像是如何创建的.我的猜测是,您已经使用了一些您所提到的“裁剪”的花哨,复杂的图像处理程序,并且该程序允许以一些不寻常的格式存储图像,并且您(或没有)修改一些在保存图像时可以使用,不知道这些选项是什么意思(如果我低估了对这里的图像格式和颜色空间的熟悉程度,则表示歉意).

然而,问题的原因是图像以YPbPr或YCbCr颜色空间的一些奇怪形式存储(我没有设法弄清楚那个,但默认情况下它们都不支持ImageIO).

我对于YPbPb-> RGB或YCbCb-> RGB的标准color conversions的尝试都没有尝试再现准确的原始颜色,但是您可能会注意到,在阅读维基百科的文章时:相当一些学术蒸气在彩色空间世界….

再次强烈建议您使用任何图像查看器/编辑器打开图像,并将其保存为“标准”格式.最好是作为PNG,因为JPG并不适合这些图像. JPG更适用于“自然”图像,如照片.对于这样的“人造”图像,压缩必须非常低以避免伪像.

然而,该程序显示的图像具有几乎正确的颜色,但颜色转换似乎还不完全正确.

import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class StrangeImageTest
{
    public static void main(String[] args) throws IOException
    {
        final BufferedImage image = readImage(new File("Ace_Diamond_1.jpg"));

        SwingUtilities.invokelater(new Runnable()
        {
            @Override
            public void run()
            {
                JFrame f = new JFrame();
                f.getContentPane().add(new JLabel(new ImageIcon(image)));
                f.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
                f.pack();
                f.setLocationRelativeto(null);
                f.setVisible(true);
            }
        });
    }

    static BufferedImage readImage(File file) throws IOException
    {
        return readImage(new FileInputStream(file));
    }

    static BufferedImage readImage(InputStream stream) throws IOException
    {
        Iterator<ImageReader> imageReaders = 
            ImageIO.getimageReadersBySuffix("jpg");
        ImageReader imageReader = imageReaders.next();
        ImageInputStream iis = 
            ImageIO.createImageInputStream(stream);
        imageReader.setInput(iis,true,true);
        Raster raster = imageReader.readRaster(0,null);
        int w = raster.getWidth();
        int h = raster.getHeight();

        BufferedImage result = 
            new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
        int rgb[] = new int[3];
        int pixel[] = new int[3];
        for (int x=0; x<w; x++)
        {
            for (int y=0; y<h; y++)
            {
                raster.getPixel(x,y,pixel);
                int Y = pixel[0];
                int CR = pixel[1];
                int CB = pixel[2];
                toRGB(Y,CB,CR,rgb);
                int r = rgb[0];
                int g = rgb[1];
                int b = rgb[2];
                int bgr = 
                    ((b & 0xFF) << 16) | 
                    ((g & 0xFF) <<  8) | 
                     (r & 0xFF);
                result.setRGB(x,bgr);
            }
        }
        return result;
    }

    // Based on http://www.equasys.de/colorconversion.html
    private static void toRGB(int y,int cb,int cr,int rgb[])
    {
        float Y = y / 255.0f;
        float Cb = (cb-128) / 255.0f;
        float Cr = (cr-128) / 255.0f;

        float R = Y + 1.4f * Cr;
        float G = Y -0.343f * Cb - 0.711f * Cr;
        float B = Y + 1.765f * Cb;

        R = Math.min(1.0f,Math.max(0.0f,R));
        G = Math.min(1.0f,G));
        B = Math.min(1.0f,B));

        int r = (int)(R * 255);
        int g = (int)(G * 255);
        int b = (int)(B * 255);

        rgb[0] = r;
        rgb[1] = g;
        rgb[2] = b;
    }
}

(注意:这可以实现得更简单,ColorConvertOp可以从用于图像的颜色空间转换为RGB颜色空间,但是如上所述,我没有想出可以使用哪个颜色空间来保存图像,即使我知道,也必须创建一个适当的ColorSpace实现.第一个websearch结果,如YCbCrColorSpace.java,不适用于给定的输入图像…)

java – 当我读取图像时,源光栅数组和源颜色空间组件不匹配的更多相关文章

  1. ios – 如何在日志中比较kCGColorSpaceModelRGB和UIExtendedSRGBColorSpace实例中的2个UIColor对象?

    现在我真的很困惑.下面是变量如何实例化:在这里,我枚举一个属性文本的属性,以跳过颜色,如果它等于Utils.redColor:所以,正如你在这段代码中看到的,textColor也是一个UIColor对象,但是日志说:这是两种确切的颜色,但是是两个不同类的实例.这两个都是UIColor类的对象,这完全令人困惑!虽然它在Swift2中运行良好,但这种比较从未触发我该如何解决它以及为什么会出现这个问题?

  2. [Swift 开发] 圆角优化

    shouldRasterize=YES会使视图渲染内容被缓存起来,下次绘制的时候可以直接显示缓存,当然要在视图内容不改变的情况下。rasterizationScale转换成光栅模式.

  3. python数字图像处理数据类型及颜色空间转换

    这篇文章主要为大家介绍了python数字图像处理数据类型及颜色空间转换示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. ios – 使用YUV颜色空间将CMSampleBufferRef转换为UIImage?

    所述那么有没有办法将CMSampleBufferRef转换为UIImage并使用YUV颜色空间?

  5. iOS 9.3颜色管理/配置文件

    我有很多应用程序依赖于基于tapped像素的rgb值检查.如果我点击一个返回128/128/138的像素,那么它会从数组中打开这个特殊的东西.使用9.3这不再起作用,因为我得到了疯狂的颜色值.我做了一些挖掘,发现iOS现在支持颜色配置文件.我的文件根本没有关联的个人资料.这似乎是个问题.自视网膜3以来的每个显示器都返回了稍微不同的饱和度,这是我必须调整的.但这揭示了一个更大的问题.有没有办法在iOS9.3中禁用颜色配置文件管理?

  6. java – 当我读取图像时,源光栅数组和源颜色空间组件不匹配

    参见英文答案>IllegalArgumentException:NumbersofsourceRasterbandsandsourcecolorspacecomponentsdonotmatchForacolorimageException1当我尝试使用以下代码阅读图像我收到以下错误在研究中,有一个类似的question,它似乎是我的JPEG图像的一个问题(它是从更大的图片裁剪可能导致错误),我必

  7. OpenGL渲染管线

    对于曲线或面要用小线段或小几何图形拼接而成可参数化曲线或表面最初可能是通过控制点以及成为基函数进行描述的。

  8. 如何更好地光栅化绘图而不会模糊matplotlib中的标签?

    我通常使用ax.set_rasterized来栅格化图形,以便在以eps格式保存时可以处理透明度,但光栅化也会模糊轴标签和刻度标签,所以有没有办法仅在轴内光栅化贴片而不是比整个数字?或者是否更好地导出具有透明度的eps格式?

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部