【问题标题】:The best way to reduce quantity of colors in bitmap palette减少位图调色板中颜色数量的最佳方法
【发布时间】:2014-03-18 08:22:26
【问题描述】:

我有一个包含许多不同颜色的位图。但我需要从这张图片中制作一个不超过 40 种颜色的方案。这就是为什么我需要减少位图调色板中颜色数量的方法。

我正在为我的应用程序使用以下代码:

        using System.Windows.Media.Imaging; //BitmapSource

        ==================================================

        //Create palette of requied color. Pay heed to maxColorCount it 
        //can have any value, but PixelFormats supports only 2,4,16 and 256 colors.
        var myPalette = new BitmapPalette(ConvertBitmap(b) as BitmapSource, 16);

        newFormatedBitmapSource.DestinationPalette = myPalette;

        //Set PixelFormats
        newFormatedBitmapSource.DestinationFormat = PixelFormats.Indexed8;
        newFormatedBitmapSource.EndInit();

        b = BitmapFromSource(newFormatedBitmapSource);

它可以工作,但结果是我经常收到一张图像,其明亮像素位于深色背景的大部分纯色背景上:

我尝试自己做:获得最近的 4 或 9 像素(正方形)并混合它。我还尝试减小位图大小并“拉伸”位图。最后,我试图吸收最接近的颜色。但是我使用上面的方法得到的最好的结果。

这就是为什么我正在寻找更好的方法来减少位图调色板中的颜色数量。

附:图像被缩放,我还在它们上面画了一个网格。

更新:

我尝试使用 scolorq,但结果是一样的。问题仍然相关。

【问题讨论】:

  • 你的问题是?
  • 我正在寻找更好的方法来减少位图调色板中的颜色数量
  • 你做了哪些研究?有很多关于如何做到这一点的资源。
  • 我试着自己做:得到最近的 4 或 9 像素(正方形)并混合它。我还尝试减小位图大小并“拉伸”位图。但是我使用上面的方法得到的最好的结果。
  • 一个非常好的实用程序是 scolorq:空间颜色量化实用程序。该站点有一个源代码(在 c++ 中,以提高速度)。更多详情scolorq: A Spatial Color Quantization Utility.

标签: c# wpf bitmap


【解决方案1】:

here 提供了一个带有 C# 源代码的出色应用程序。它实现了 8 种算法并有大量的选项。

【讨论】:

  • 嗨,@Eldarien! :) 感谢您的回答。解决方案和结果看起来很棒!
猜你喜欢
  • 2011-09-06
  • 2013-10-23
  • 2013-07-06
  • 2014-07-20
  • 2016-04-06
  • 1970-01-01
  • 2013-01-15
  • 2012-03-03
  • 1970-01-01
相关资源
最近更新 更多