繁体   English   中英

24位RGB图像到8位灰度字节数组

[英]24 bit RGB image to 8 bit gray scale byte array

我正在寻找一些代码片段,以将24位RGB图像转换为Java中的8位灰度字节数组。 我已经在网上进行了探索,但找不到任何相关材料。

假设我们有一个24位RGB图像(“ C:\\ img \\ face.jpg”),我们需要将其转换为8位灰度字节数组,类似于Java中的byte [] face。

提前致谢。

用“非常”的简单方式,您可以做类似...

    try {
        BufferedImage source = ImageIO.read(new File("C:/img/face.jpg"));
        BufferedImage gray = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
        Graphics2D g2d = gray.createGraphics();
        g2d.drawImage(source, 0, 0, null);
        g2d.dispose();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
        ImageIO.write(gray, "png", ios);
        ios.close();

        byte[] array = baos.toByteArray();
    } catch (IOException ex) {
        Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
    }

该字节数组包含实际的PNG图像,而不是原始像素数据,这表现在这里 ,这是很重要的!

您也可以使用类似...

BufferedImage gray = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_ARGB);

ColorConvertOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
op.filter(source, gray);

将图像转换为灰度为证明这里

如果您确实需要像素数据,则可以执行以下操作:

WritableRaster raster = gray.getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();    
byte[] rawPixels = data.getData();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM