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”透明图像,以便在代码中只需几行就可以得到合成图像。没有混乱,没有循环。。。希望这对你有所帮助