我有一个透明背景的画布。笔划被绘制在它上面。使用SaveAsync
类的InkManager
方法保存时,它仅保存笔划而不保存透明背景。我有什么方法可以保存背景吗?
否则,如果有办法在InkManager
上呈现WritableBitmap
笔画?
这就是我目前的储蓄方式。
StorageFile Ink_File = await m_localfolder.CreateFileAsync(path, CreationCollisionOption.ReplaceExisting);
using (var stream = await Ink_File.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite))
{
using (var outputStream = stream.GetOutputStreamAt(0))
{
uint x = await i.SaveAsync(outputStream);
await outputStream.FlushAsync();
}
}
答案 0 :(得分:1)
艰难的方式:
在纯C#中执行此操作的方法是将“{strong> GIF ”以及要用作WritableBitmap
的背景“加载”到内存中。在您将位图表示从背景位图的PixelBuffer
复制到byte[]
的位图表示后,您将使用它来组合笔画。现在使用 GIF 图片的PixelBuffer
来逐步放弃所有透明的像素,将任何不在byte[]
上的像素组合起来作为普通背景图片,请注意尺寸,因为你必须做一些数学计算,以确定byte
对应于哪个像素上的颜色通道。这一切都非常严格,但并不是很困难。
简单方法:
幸运的是,有人把所有这些byte[]
操纵的东西包装成一个人们似乎喜欢的漂亮便携式图书馆,这里可以找到:http://writeablebitmapex.codeplex.com/
基本上,该库可以让您访问常规绘图和“bitblt-ing”(a.k.a.位块传输)功能。所以现在你应该能够在不透明的顶部上“透视”透明图像,使你的复合只需几行代码。没有混乱,没有循环...希望这有助于确认