1

我有一个透明背景的画布。在它上面画了笔画。使用类SaveAsync的方法InkManager保存时,只保存笔画,不保存透明背景。有什么方法可以保存背景吗?

否则,如果有一种方法可以让我InkManager在 a 上渲染笔画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();
    }

}
4

1 回答 1

1

艰难的道路:

那么在纯 C# 中执行此操作的方法是将渲染的GIF和要用作s 的背景WritableBitmap“加载”到内存中。在您拥有两者的位图表示后,将像素数据从背景位图复制PixelBuffer到 a byte[],您将使用它来合成顶部的笔划。现在使用GIFPixelBuffer图像的逐步丢弃所有透明的像素,并结合任何不属于您的像素,这些像素最初是纯背景图像,请注意此处的尺寸,因为您必须做一些数学运算才能计算出来出什么对应于什么像素上的什么颜色通道。这一切都很严谨,但也不是很困难。byte[]byte

简单的方法:

对你来说幸运的是,有人不厌其烦地将所有这些byte[]操纵的东西包装到一个人们似乎喜欢的漂亮的便携式库中,可以在这里找到:http ://writeablebitmapex.codeplex.com/

基本上,该库将使您能够访问普通绘图和“bitblt-ing”(又名位块传输)功能。所以现在你应该能够将透明图像“blt”在不透明图像的顶部,以便在几行代码中获得合成。没有混乱,没有循环......希望这会有所帮助-ck

于 2013-04-22T20:39:12.673 回答