Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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中从具有透明度的PNG创建图像掩码?_Java_Image Processing_Png - Fatal编程技术网

如何在Java中从具有透明度的PNG创建图像掩码?

如何在Java中从具有透明度的PNG创建图像掩码?,java,image-processing,png,Java,Image Processing,Png,我需要创建一个Java类来从一个透明的PNG图像创建一个图像掩码。我希望尽可能多地使用现成的图像处理库来实现这一点。 阅读原始图像 使用新光栅和新颜色模型创建新图像: 一种光栅,它包裹图像的原始数据缓冲区,只是解释方式不同(使用colormodel) 一种颜色模型,每四个字节中取第一个字节,并将其解释为强度 原始光栅需要是字节交错光栅,每个像素有四个字节。本例中未进行安全检查 BufferedImage orig = ImageIO.read(new File("temp.png"));

我需要创建一个Java类来从一个透明的PNG图像创建一个图像掩码。我希望尽可能多地使用现成的图像处理库来实现这一点。

  • 阅读原始图像
  • 使用新光栅和新颜色模型创建新图像:
    • 一种光栅,它包裹图像的原始数据缓冲区,只是解释方式不同(使用colormodel)
    • 一种颜色模型,每四个字节中取第一个字节,并将其解释为强度
原始光栅需要是字节交错光栅,每个像素有四个字节。本例中未进行安全检查

BufferedImage orig = ImageIO.read(new File("temp.png"));

DataBuffer dataBuffer = orig.getRaster().getDataBuffer();
ColorSpace cs         = ColorSpace.getInstance(ColorSpace.CS_GRAY);
int[]      nBits      = {8};
int[]      bOffs      = {0};
ColorModel colorModel = new ComponentColorModel(cs, nBits, false, false,
                                                Transparency.TRANSLUCENT,
                                                DataBuffer.TYPE_BYTE);
WritableRaster raster = Raster.createInterleavedRaster(dataBuffer,
                                                       orig.getWidth(), orig.getHeight(),
                                                       orig.getWidth() * 4, 4,
                                                       bOffs, null);

BufferedImage mask = new BufferedImage(colorModel, raster, false, null);

请告诉我们您迄今为止尝试了什么,显然他不知道有任何“开箱即用”的类可以尝试使用。获得更多信息确实有帮助。除了遮罩,PNG是否还包含颜色?(就像掷骰子一样)