如何在颜色模型之间进行转换

Nev*_*lle 5 java image image-processing

我对图像处理很新.我有一个PNG图像(读取使用ImageIO.read()),BufferedImage.TYPE_CUSTOM当我调用getType()它时产生.

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

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

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

需要进行上述操作以使用仅识别上述类型的库来进一步处理图像.

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

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

eri*_*223 11

试试这个:

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;
}
Run Code Online (Sandbox Code Playgroud)


Cha*_* Ma 0

你试过这个吗?

BufferedImage rgbImg = new BufferedImage(bi.getWidth(), bi.getHeight(), BufferedImage.TYPE_INT_RGB);
Run Code Online (Sandbox Code Playgroud)

  • 这不是创建了一个新的空白图像吗?您和 Eric 似乎选择了相同的方法,使用图形对象重新绘制图像,即使看起来您只写了第一行。我确信有一种更快的方法,也许隐藏在 AWT 文件中或您需要自己实现的东西中,转换 getData() 返回的 WritableRaster。(也就是说,除非 drawImage 按原样采用这些快捷方式,但我对此表示怀疑。)有什么想法吗? (5认同)