如何在Windows 8中的GIF中保存墨迹笔划和背景?

时间:2013-04-18 09:44:06

标签: c# canvas windows-8 windows-runtime windows-store-apps

我有一个透明背景的画布。笔划被绘制在它上面。使用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();
    }

}

1 个答案:

答案 0 :(得分:1)

艰难的方式:

在纯C#中执行此操作的方法是将“{strong> GIF ”以及要用作WritableBitmap背景“加载”到内存中。在您将位图表示从背景位图的PixelBuffer复制到byte[]的位图表示后,您将使用它来组合笔画。现在使用 GIF 图片的PixelBuffer来逐步放弃所有透明的像素,将任何不在byte[]上的像素组合起来作为普通背景图片,请注意尺寸,因为你必须做一些数学计算,以确定byte对应于哪个像素上的颜色通道。这一切都非常严格,但并不是很困难。

简单方法:

幸运的是,有人把所有这些byte[]操纵的东西包装成一个人们似乎喜欢的漂亮便携式图书馆,这里可以找到:http://writeablebitmapex.codeplex.com/

基本上,该库可以让您访问常规绘图和“bitblt-ing”(a.k.a.位块传输)功能。所以现在你应该能够在不透明的顶部上“透视”透明图像,使你的复合只需几行代码。没有混乱,没有循环...希望这有助于确认