【问题标题】:Create custom palette for WritableBitmap from 256 Colours从 256 种颜色为 WritableBitmap 创建自定义调色板
【发布时间】:2012-08-31 10:25:07
【问题描述】:

我现在一直在寻找将近一个小时,但找不到答案。我目前正在开发一个程序,该程序以灰度或具有 256 种预定颜色的色阶显示自定义图像(使用 WritableBitmap)。

图像的输入将是一个字节数组(如果我将 PixelFormat 属性设置为 PixelFormats.Gray8 就可以正常工作),但由于我也需要自定义色标,我想创建自定义色标(一个用于灰色和一种或多种颜色)。我认为我需要使用的是 PixelFormat.Indexed8 属性,但我根本不知道如何使用它以及如何创建自定义调色板,并且互联网对如何创建一个没有帮助。

【问题讨论】:

    标签: c# wpf bitmap palette


    【解决方案1】:

    您可以创建自定义BitmapPalette 并将其应用于新的WriteableBitmap

    var myPalette = new BitmapPalette(new List<Color> 
    { 
        Colors.Red,
        Colors.Blue,
        Colors.Green,
        // ...
    });
    
    var writeableBitmap = new WriteableBitmap(
        width, 
        height, 
        96, 
        96, 
        PixelFormats.Indexed8, // Paletted bitmap with 256 colours
        myPalette);
    
    writeableBitmap.WritePixels(...);
    

    【讨论】:

    • 感谢您的回答。好的,是的,我在某些时候已经看到了,但是如何使用相应的 256 个索引设置 256 种颜色?我的意思是 Colors.Red 很简单,但我需要添加例如 Color.Fromrgb(100, 100, 100) 等...
    • 要获取灰色列表,请使用:var myPalette = new BitmapPalette(Enumerable.Range(0, 256).Select(c =&gt; Color.FromRgb((byte)c, (byte)c, (byte)c)).ToList());
    • @phil13131 您可以将任何您喜欢的颜色添加到您的调色板中。我使用基本颜色来保持示例简单,但也可以使用指定的颜色通道值创建颜色。调色板中的每种颜色都由其索引号标识,该索引号对应于它在调色板数组中的位置。在这种情况下,颜色由调色板数组中 0 到 255 之间的索引确定。
    • 谢谢,我实际上发现我也可以简单地使用Color.Fromrgb(...) 而不是Colors.Red 我会看看什么最有效。 @Paolo 再次感谢您的回答。我什至不认为索引会(虽然很明显)只是添加颜色的顺序。
    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2022-10-16
    • 2012-08-08
    • 2021-06-15
    相关资源
    最近更新 更多