【问题标题】:How to change Colors of a BitmapImage如何更改位图图像的颜色
【发布时间】:2020-10-10 11:56:53
【问题描述】:

我正在 WPF(!) 窗口中定义的画布上绘制一些绘图。

 <Canvas x:Name="cBoard" Margin="0,26,-0.2,0.2" AllowDrop="True" />  

我在我的项目中添加了一些 PNG 文件并标记了它们,以便通过编译添加它们。它们都是黑白的。

Dim img As New Image
Dim imgSrc As ImageSource
imgSrc = New BitmapImage(New Uri("/Resources/picture.png", UriKind.RelativeOrAbsolute))
img.Source = imgSrc
cBoard.Children.Add(img)

工作正常。但现在我想让用户设置图片的颜色。我发现了很多示例(逐字节或 CorlorMap)如何使用 WinForms/GDI+ 中使用的“位图”来做到这一点,但没有一个如何像 WPF 那样使用“位图图像”来做到这一点。有什么想法吗?

因为我找不到任何解决方案,我尝试将 BitmapImage 转换为 System.Drawing.Bitmap,像我找到的示例一样更改所有颜色,然后将其全部转换为解决方法。可悲的是,我没有运行 System.Drawing 方法。由于 URI 中的相对地址,它们都会在某些时候抛出错误。同样,如果有人知道如何立即更改颜色,这不是 nessaray。

问候并感谢您的帮助 斯坦

【问题讨论】:

  • WriteableBitmap 类。它的BackBufferStride 的使用与BitmapData.Stride 非常相似。它的BackBuffer 作为BitmapData.Scan0 指针。
  • 在任何情况下都没有理由使用相对路径。
  • 好的,谢谢 我发现了如何通过添加“pack”将 URI 更改为绝对值 imgSrc = New BitmapImage(New Uri("pack://application:,,,/Resources/position.png ", UriKind.Absolute))
  • WriteableBitmap 看起来不错。我仍在努力解决“BackBufferStride”和“BackBuffer”,但感谢您的提示
  • 我链接的文档中有一个基本示例(应该可以帮助您入门)和一个不错的描述。请考虑图像 DPI(查看该示例中的 Dpi 参数设置。这是有原因的,但它并不适用于所有上下文)。

标签: .net wpf vb.net


【解决方案1】:

更改黑白图像的一种或两种颜色可能最简单的方法是使用带有调色板像素格式和两种颜色调色板的FormatConvertedBitmap

// the source bitmap, no matter if B/W or anything else
BitmapSource source = ...;

// the target colors
var palette = new BitmapPalette(new List<Color> { Colors.Yellow, Colors.Red });

// the resulting bitmap
var twoColorImage = new FormatConvertedBitmap(source, PixelFormats.Indexed1, palette, 0);
image.Source = twoColorImage;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2013-03-29
    • 2020-09-20
    相关资源
    最近更新 更多