繁体   English   中英

如何在java中将8位灰度位图转换为4位?

[英]how to convert a 8 bit gray scale bitmap to 4 bit scale in java?

我想读一个灰度图像文件,例如lena.bmp,然后降低java中的灰度级分辨率,我用PixelGrabber来获取该图像的像素数据,如何将这个8位灰度位图转换为4位? 谢谢!

如果他们可以在这里帮助你,那不可能,但也许你可以看看JAI(Java高级成像)Apache Commons SanselanImage4j

编辑:

刚刚测试了Image4J库:

转换8位 - > 4位非常简单:

final File inFile = new File("test.bmp");
final File outFile = new File("test2.bmp");

BufferedImage inImage = ImageIO.read(inFile);
BufferedImage outImage = ConvertUtil.convert4(inImage); // Converts to 4 Bit

ImageIO.write(outImage, "bmp", outFile);

有关更多信息,请参见Image4J - ConvertUtil文档

这确实将位数减少到4:

public static void main(String[] args) throws Exception {
    BufferedImage in = ImageIO.read(new File(args[0]));
    int w = in.getWidth(), h = in.getHeight();
    int[] bits = { 4 };
    ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
    int dt = DataBuffer.TYPE_BYTE;
    ColorModel cm = new ComponentColorModel
        (cs, bits, false, false, Transparency.OPAQUE, dt);
    WritableRaster wr = cm.createCompatibleWritableRaster(w, h);
    BufferedImage out = new BufferedImage(cm, wr, false, null);
    Graphics2D g = out.createGraphics();
    g.drawImage(in, 0, 0, null);
    g.dispose();
    ImageIO.write(out, "png", new File(args[1]));
}

到目前为止,我尝试过的所有查看器应用程序的结果文件看起来都太暗了。 但是,如果你只对这些位感兴趣,那么在上面的转换对你来说,或许可以在wr栅格上运行。

如果没有,那么也许你应该设置一个包含你想要的2 4个灰度级的IndexedColorModel 您可以简单地将索引乘以17以获得均匀间隔的强度,从0x0 * 17 = 0x000xf * 17 = 0xff

public static void main(String[] args) throws Exception {
    BufferedImage in = ImageIO.read(new File(args[0]));
    int w = in.getWidth(), h = in.getHeight();
    byte[] v = new byte[1 << 4];
    for (int i = 0; i < v.length; ++i)
        v[i] = (byte)(i*17);
    ColorModel cm = new IndexColorModel(4, v.length, v, v, v);
    WritableRaster wr = cm.createCompatibleWritableRaster(w, h);
    BufferedImage out = new BufferedImage(cm, wr, false, null);
    Graphics2D g = out.createGraphics();
    g.drawImage(in, 0, 0, null);
    g.dispose();
    ImageIO.write(out, "png", new File(args[1]));
}

暂无
暂无

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

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