C# 如何在Windows8中保存GIF中的墨迹笔划和背景?
我有一块背景透明的画布。它上面画着笔划。使用C# 如何在Windows8中保存GIF中的墨迹笔划和背景?,c#,canvas,windows-8,windows-runtime,windows-store-apps,C#,Canvas,Windows 8,Windows Runtime,Windows Store Apps,我有一块背景透明的画布。它上面画着笔划。使用InkManager类的SaveAsync方法保存时,它只保存笔划,而不保存透明背景。有什么方法可以保存背景吗 否则,是否有一种方法可以在可写位图上渲染InkManager笔划 这就是我目前的储蓄方式 StorageFile Ink_File = await m_localfolder.CreateFileAsync(path, CreationCollisionOption.ReplaceExisting); using (var stream =
InkManager
类的SaveAsync
方法保存时,它只保存笔划,而不保存透明背景。有什么方法可以保存背景吗
否则,是否有一种方法可以在可写位图
上渲染InkManager
笔划
这就是我目前的储蓄方式
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();
}
}
艰难之路:
在纯C#中实现这一点的方法是将渲染的GIF和要用作可写位图的背景加载到内存中。在获得两者的位图表示形式后,将像素数据从背景位图的PixelBuffer
复制到byte[]
中,您将使用它来合成图像顶部的笔划。现在使用GIF图像的PixelBuffer
逐步丢弃所有透明像素,并将任何不在以普通背景图像开始的字节[]
上的像素组合起来,注意这里的尺寸,因为您需要做一些数学计算,以确定哪个字节对应于哪个像素上的哪个颜色通道。这一切都非常严格,但并不十分困难
简单的方法:
幸运的是,有人不厌其烦地将所有这类字节[]
操作的内容打包到一个人们似乎很喜欢的便携库中,可在这里找到:
基本上,该库将允许您访问普通绘图和“位块传输”(又称位块传输)功能。因此,现在您应该能够在不透明图像的顶部“blt”透明图像,以便在代码中只需几行就可以得到合成图像。没有混乱,没有循环。。。希望这对你有所帮助-ck艰难的道路:
在纯C#中实现这一点的方法是将渲染的GIF和要用作可写位图的背景加载到内存中。在获得两者的位图表示形式后,将像素数据从背景位图的PixelBuffer
复制到byte[]
中,您将使用它来合成图像顶部的笔划。现在使用GIF图像的PixelBuffer
逐步丢弃所有透明像素,并将任何不在以普通背景图像开始的字节[]
上的像素组合起来,注意这里的尺寸,因为您需要做一些数学计算,以确定哪个字节对应于哪个像素上的哪个颜色通道。这一切都非常严格,但并不十分困难
简单的方法:
幸运的是,有人不厌其烦地将所有这类字节[]
操作的内容打包到一个人们似乎很喜欢的便携库中,可在这里找到:
基本上,该库将允许您访问普通绘图和“位块传输”(又称位块传输)功能。因此,现在您应该能够在不透明图像的顶部“blt”透明图像,以便在代码中只需几行就可以得到合成图像。没有混乱,没有循环。。。希望这对你有所帮助