繁体   English   中英

如何在C#中调整8bpp位图图像的大小?

[英]How to resize 8bpp bitmap image in c#?

这是用于重复识别。

我可以将图像转换为8bpp位图,但是由于它是索引像素格式,所以我不知道如何将其缩小。 无论如何,有没有做它而不将其更改为更高的像素格式(会引入更多不需要的颜色)?

谢谢

这是2D计算机图形学中的常见问题。 需要询问的总体问题是您要完成什么。 是吗:

  1. 您是否需要每个像素图像较小的8位,以较小的形式最能代表原始图像?
  2. 您是否希望每像素图像的8位较小,并且索引图像与原始图像具有相同的索引颜色调色板(调色板)?

例如,当我设计在8bpp显示器上运行的2D游戏时,我要求美术师以全分辨率生成所有24位彩色的原始源图像。 然后,我创建了一个工作流程流程,将它们的调色板全部一次统一,因此它们都使用了优化的调色板,并尽可能准确地表示出来。 如果是这种情况,建议您返回到原始源图像并将其重新转换为较小的尺寸。

有时,我正在做一个一次性实验,或者即时处理艺术品,而我并不关心确保所有图像都使用相同的调色板。 在这种情况下,我会将图像在内存中转换为24bpp,使用双三次插值(这是一种高质量的调整大小算法)来调整其大小,然后将其转换回8bpp。 不利的一面是,这样做会为调整后的图像生成一个新的且独特的调色板。

但是,如果您确实想在不更改调色板的情况下调整图像大小并且在内部不上转换为24bpp,则必须使用两个非常糟糕的选择之一:您可以使用抖动来尝试根据尺寸图选择最佳颜色-这个过程很棘手,需要仔细跟踪您的颜色错误-或者您可以简单地放下扫描线,直到图像匹配所需的正确大小。

作为参考,像Neo Geo这样的传统2D控制台采用了“线下移”方法,从而使它们如今具有古朴和锯齿状的图形外观。 现代控制台始终以16位,24位或32位颜色重新采样图像,有时甚至使用浮点表示颜色值。

通常,在缩小图片时,会对颜色进行某种插值。 假设您有一张2x2的图片,顶部的两个像素是黑色,底部的2个像素是白色。 您要将其缩小为1x2图片。 这两个像素将是黑色和白色(灰色)的混合物。

BB  -->   GG
WW

其中G =灰色(50%黑色,50%白色),B =黑色和W =白色。
但是,最终图像中出现的灰色在原始图像中不存在。 对于索引图像,这是一个问题。 您可以选择一个像素(随机或使用某种算法):

BB  -->   BW
WW

或插值,然后在索引中选择最接近插值结果的颜色。 因此,也许您的索引中没有50%的灰色,但您确实有40%的灰色。 那将非常接近,因此您可以选择它。 如果没有足够接近的颜色,则可以使用第一种方法。

第三,您可以转换为普通的位图,调整大小,然后转换回索引,但是根据您的问题措辞,您似乎想避免这种情况。

暂无
暂无

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

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