【问题标题】:How to convert between color models如何在颜色模型之间进行转换
【发布时间】:2011-10-16 10:20:56
【问题描述】:

我对图像处理非常陌生。我有一个 PNG 图像(使用 ImageIO.read() 读取),当我在其上调用 getType() 时会产生 BufferedImage.TYPE_CUSTOM

BufferedImage bi = ImageIO.read(new URL("file:/C:/samp1.png"));
int type =bi.getType(); //TYPE_CUSTOM for samp1.png

现在我想将其转换为以下模型之一:

  1. TYPE_USHORT_GRAY
  2. TYPE_3BYTE_BGR
  3. TYPE_BYTE_GRAY
  4. TYPE_INT_RGB
  5. TYPE_INT_ARGB

需要使用仅识别上述类型的库来进一步处理图像。

如何从TYPE_CUSTOM颜色模型转换为其他模型?

任何帮助/指针将不胜感激。 如果没有任何现有的库可以执行此操作,那么任何指向步骤/算法的链接/帖子都会很棒。

【问题讨论】:

  • 我还在寻找“?”标记你的问题,对不起,哥们,你能改一下你的问题吗?谢谢
  • @Krio 为了清楚起见添加了这个问题。

标签: java image image-processing


【解决方案1】:

试试这个:

public static BufferedImage convert(BufferedImage src, int bufImgType) {
    BufferedImage img= new BufferedImage(src.getWidth(), src.getHeight(), bufImgType);
    Graphics2D g2d= img.createGraphics();
    g2d.drawImage(src, 0, 0, null);
    g2d.dispose();
    return img;
}

【讨论】:

  • 这个答案效果最好,标记为可接受的答案只会创建一个空白图像。您仍然需要在其中填写数据。
【解决方案2】:

你试过了吗?

BufferedImage rgbImg = new BufferedImage(bi.getWidth(), bi.getHeight(), BufferedImage.TYPE_INT_RGB);

【讨论】:

  • 这不只是创建一个新的空白图像吗?你和 Eric 似乎选择了相同的方法,使用图形对象重绘图像,即使看起来你只写了第一行。我相信有一种更快的方法,可能隐藏在 AWT 文件中或您需要自己实现的东西中,转换由 getData() 返回的 WritableRaster。 (也就是说,除非 drawImage 采用这些快捷方式,但我对此表示怀疑。)有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多