这是为了重复识别。
我可以将图像转换为 8bpp 位图,但由于它是索引像素格式,我不知道如何将其缩小。无论如何都可以在不将其更改为更高像素格式的情况下进行操作(这会引入更多不需要的颜色)?
谢谢
这是 2D 计算机图形学中的常见问题。需要问的总体问题是您想要完成什么。是吗:
例如,当我设计在 8bpp 显示器上运行的 2D 游戏时,我要求艺术家以 24 位彩色全分辨率制作所有原始源图像。然后,我创建了一个工作流程,一次性统一了他们的调色板,因此他们都使用了优化的调色板并尽可能准确地表示出来。如果这是您的情况,我建议您返回原始源图像并将其重新转换为较小的尺寸。
有时,我正在做一个一次性的实验,或者在飞行中处理艺术,我不在乎确保所有图像都使用相同的调色板。在这种情况下,我会在内存中将图像转换为 24bpp,使用双三次插值(这是一种高质量的调整大小算法)调整它的大小,然后将其重新转换回 8bpp。缺点是这样做会为调整大小的图像生成一个新的独特的调色板。
但是,如果您真的想在不更改调色板且内部不上转换为 24bpp 的情况下调整图像大小,则必须使用两个非常糟糕的选择之一:您可以使用抖动来尝试根据尺寸图选择最佳颜色 - a这个过程很棘手,需要仔细跟踪您的颜色错误 - 或者您可以简单地放下扫描线,直到图像与您想要的正确尺寸匹配。
作为参考,像 Neo Geo 这样的传统 2D 游戏机采用了“line drop”方法,这导致它们在今天出现了古朴和锯齿状的图形外观。现代控制台总是以 16、24 或 32 位颜色重新采样图像,有时甚至使用浮点来表示颜色值。
通常,当您缩小图片时,您会对颜色进行某种插值。想象一下,你有一张 2x2 的图片,顶部的两个像素是黑色的,底部的 2 个像素是白色的。您想将其缩小为 1x2 图片。这两个像素将是黑色和白色的混合,即灰色。
BB --> GG
WW
其中 G = 灰色(50% 黑色,50% 白色),B = 黑色,W = 白色。
但是,最终图像中的灰色在原始图像中不存在。对于索引图像,这是一个问题。您可以选择一个像素(随机或使用某种算法):
BB --> BW
WW
或插值,然后选择索引中最接近插值结果的颜色。因此,也许您的索引中没有 50% 的灰色,但您确实有 40%。那将非常接近,因此您可以选择它。如果没有足够接近的颜色,您可以回退到第一种方法。
第三,您可以转换为普通位图,调整大小,然后转换回索引,但根据您对问题的措辞,您似乎想避免这种情况。