【发布时间】: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 参数设置。这是有原因的,但它并不适用于所有上下文)。