【问题标题】:C# - Copy an Image into an 8-bit Indexed ImageC# - 将图像复制到 8 位索引图像中
【发布时间】:2009-11-19 15:27:27
【问题描述】:

我想从一个常规的 32 位图像对象创建一个 8 位索引图像。

Bitmap img = new Bitmap(imgPath); // 32-bit
Bitmap img8bit = new Bitmap(imgW, imgH, Format8bppIndexed); // 8-bit

// copy img to img8bit -- HOW?

img8bit.Save(imgNewPath, ImageFormat.Png);

我无法使用 SetPixel 逐个像素地复制它,因为 Graphics 不适用于索引图像。

还有什么办法?

【问题讨论】:

    标签: c# image bitmap


    【解决方案1】:

    我发现了一个C# library,它将位图转换为调色板(8 位)图像。该技术速度很快,因为它直接调用 GDI32(Windows 图形系统)。

    要使用灰度调色板转换为 8bpp(调色板)图像,请执行以下操作

    System.Drawing.Bitmap b0 = CopyToBpp(b,8);
    

    如果你想转换成不同调色板的图像,请查看 CopyToBpp 源代码中的 cmets 以获得建议。请注意,当您转换为 1bpp 或 8bpp 调色板副本时,Windows 将逐个查看每个像素,并选择最接近该像素的调色板条目。根据您的源图像和调色板的选择,您最终可能会得到一个只使用调色板中可用颜色一半的图像。

    【讨论】:

      【解决方案2】:

      将任意 RGBA 图像转换为 8 位索引位图是一项非常重要的操作;您必须做一些数学运算来确定前 256 种颜色并对其余颜色进行四舍五入(或进行抖动等)。

      http://support.microsoft.com/kb/319061 包含所有细节,除了一个好的算法,它应该让你知道如何开始。

      【讨论】:

        猜你喜欢
        • 2014-11-03
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 2015-08-11
        • 1970-01-01
        • 2015-08-20
        • 1970-01-01
        • 2012-03-31
        相关资源
        最近更新 更多