Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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 如何将BuffereImage转换为8位?_Java_Image_Image Processing_Bufferedimage_8 Bit - Fatal编程技术网

Java 如何将BuffereImage转换为8位?

Java 如何将BuffereImage转换为8位?,java,image,image-processing,bufferedimage,8-bit,Java,Image,Image Processing,Bufferedimage,8 Bit,我在看ImageConverter类,试图找出如何将BuffereImage转换为8位颜色,但我不知道该怎么做。我也在网上搜索,找不到简单的答案,他们都在谈论8位灰度图像。我只是想把图像的颜色转换成8位。。。没有其他,没有调整大小没有什么。有人介意告诉我怎么做吗。您可以在ConvertUtil类中使用convert8方法 有关详细信息,请查看。您可以使用官方Sun(现为Oracle)图像库JAI(Java Advanced Imaging) 显示了可以应用的量化过程的选择。这篇文章中的代码片段运

我在看ImageConverter类,试图找出如何将BuffereImage转换为8位颜色,但我不知道该怎么做。我也在网上搜索,找不到简单的答案,他们都在谈论8位灰度图像。我只是想把图像的颜色转换成8位。。。没有其他,没有调整大小没有什么。有人介意告诉我怎么做吗。

您可以在
ConvertUtil
类中使用
convert8
方法

有关详细信息,请查看。

您可以使用官方Sun(现为Oracle)图像库JAI(Java Advanced Imaging)


显示了可以应用的量化过程的选择。

这篇文章中的代码片段运行良好:

public static void main(String[] args) throws Exception {
    BufferedImage src = convertRGBAToIndexed(ImageIO.read(new File("/src.jpg")));
    ImageIO.write(src, "gif", new File("/dest.gif"));
}

public static BufferedImage convertRGBAToIndexed(BufferedImage src) {
    BufferedImage dest = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_BYTE_INDEXED);
    Graphics g = dest.getGraphics();
    g.setColor(new Color(231, 20, 189));

    // fill with a hideous color and make it transparent
    g.fillRect(0, 0, dest.getWidth(), dest.getHeight());
    dest = makeTransparent(dest, 0, 0);

    dest.createGraphics().drawImage(src, 0, 0, null);
    return dest;
}

public static BufferedImage makeTransparent(BufferedImage image, int x, int y) {
    ColorModel cm = image.getColorModel();
    if (!(cm instanceof IndexColorModel))
        return image; // sorry...
    IndexColorModel icm = (IndexColorModel) cm;
    WritableRaster raster = image.getRaster();
    int pixel = raster.getSample(x, y, 0); // pixel is offset in ICM's palette
    int size = icm.getMapSize();
    byte[] reds = new byte[size];
    byte[] greens = new byte[size];
    byte[] blues = new byte[size];
    icm.getReds(reds);
    icm.getGreens(greens);
    icm.getBlues(blues);
    IndexColorModel icm2 = new IndexColorModel(8, size, reds, greens, blues, pixel);
    return new BufferedImage(icm2, raster, image.isAlphaPremultiplied(), null);
}

你可能必须选择一种量化算法,即将图像的颜色范围转换为256个输入调色板。你将图像的颜色转换为8位是什么意思?我猜你想缩小颜色空间?你们想执行颜色量化吗?你们能给我指一下某种库/API吗?我不知道你在说什么。这听起来也像是我可以创建自己的调色板,如果可能的话会更好。效果很好,只需删除透明度部分。你有一些示例代码吗?我无法使用ConvertUtil.convert8,因此我必须导入该类,但找不到导入代码。你是不是碰巧做了什么/在哪里?