渲染针对具有有限调色板的设备的 2D 图像
Render a 2D image targeted for a device with a limited colour palette
我需要渲染位图图像(在我的 PC 上),旨在显示在调色板极其有限的设备上(例如 16 种颜色,包括红色 (0xFF0000)、DARK_RED (0x880000) ,灰色等)。我只需要渲染 2D 几何对象——文本、点、线、多边形和圆弧。我想使用抗锯齿(尽管由于调色板有限,这本身可能非常有限)。我想在将其另存为 PNG 以传输到目标设备之前将其显示在屏幕上。
假设我从从 BufferedImage 获得的 GraphicsD obj 开始,基本方法是什么?我知道如何在 AWT Frame 上显示图像以及如何使用 ImageIO 保存图像,但不太清楚如何使用特定调色板渲染形状。
spring 考虑的选项是:
使用 Graphics2D API 以全 24 位颜色渲染它,并启用抗锯齿。 Post-将每种颜色映射到目标调色板中它最近的邻居的过程。
说服 Graphics2D 使用目标调色板 (IndexColorModel?)。通过 Graphics2D 渲染 API.
为渲染线条、形状等编写我自己的基元
选项 3 我不喜欢。选项 1 是可行的,但我不禁觉得如果针对目标调色板这样做,抗锯齿效果会更好。这可能只是偏执狂。
选项 2 我不清楚,也许不可能。
想法?
解决方案似乎非常简单。首先创建一个包含目标设备上可用颜色的 IndexColorModel。然后创建一个 BufferedImage,指定 TYPE_BYTE_INDEXED,并提供 IndexColorModel。然后启用抗锯齿:
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_INDEXED, indexColorModel);
Graphics2D gfx2d = image.createGraphics();
gfx2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);
gfx2d.setColor(Color.WHITE);
gfx2d.drawLine(10, 10, 100, 160);
Graphics2D 渲染基元将仅使用 IndexColorModel 中的颜色应用抗锯齿,即目标设备颜色。
我需要渲染位图图像(在我的 PC 上),旨在显示在调色板极其有限的设备上(例如 16 种颜色,包括红色 (0xFF0000)、DARK_RED (0x880000) ,灰色等)。我只需要渲染 2D 几何对象——文本、点、线、多边形和圆弧。我想使用抗锯齿(尽管由于调色板有限,这本身可能非常有限)。我想在将其另存为 PNG 以传输到目标设备之前将其显示在屏幕上。
假设我从从 BufferedImage 获得的 GraphicsD obj 开始,基本方法是什么?我知道如何在 AWT Frame 上显示图像以及如何使用 ImageIO 保存图像,但不太清楚如何使用特定调色板渲染形状。
spring 考虑的选项是:
使用 Graphics2D API 以全 24 位颜色渲染它,并启用抗锯齿。 Post-将每种颜色映射到目标调色板中它最近的邻居的过程。
说服 Graphics2D 使用目标调色板 (IndexColorModel?)。通过 Graphics2D 渲染 API.
为渲染线条、形状等编写我自己的基元
选项 3 我不喜欢。选项 1 是可行的,但我不禁觉得如果针对目标调色板这样做,抗锯齿效果会更好。这可能只是偏执狂。
选项 2 我不清楚,也许不可能。
想法?
解决方案似乎非常简单。首先创建一个包含目标设备上可用颜色的 IndexColorModel。然后创建一个 BufferedImage,指定 TYPE_BYTE_INDEXED,并提供 IndexColorModel。然后启用抗锯齿:
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_INDEXED, indexColorModel);
Graphics2D gfx2d = image.createGraphics();
gfx2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);
gfx2d.setColor(Color.WHITE);
gfx2d.drawLine(10, 10, 100, 160);
Graphics2D 渲染基元将仅使用 IndexColorModel 中的颜色应用抗锯齿,即目标设备颜色。