1

背景が透明なキャンバスがあります。その上にストロークが描かれます。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();
    }

}
4

1 に答える 1

1

難しい方法:

純粋な C# でこれを行う方法は、レンダリングされたGIFとsとして使用する背景WritableBitmapをメモリに "ロード" することです。両方のビットマップ表現を取得したら、ピクセル データを背景ビットマップから にコピーしPixelBufferbyte[]それを使用して上にストロークを合成します。ここPixelBufferで、GIF画像の を使用して、透明なすべてのピクセルを破棄しbyte[]、無地の背景画像として始まったものではないピクセルを組み合わせます。ここでは、少し計算する必要があるため、寸法に注意してください。どのbyteピクセルのどのカラーチャネルに対応するかを出力します。これはすべて非常に厳密ですが、それほど難しいことではありません。

簡単な方法:

幸いなことに、誰かがこの種のbyte[]操作をすべて、人々が気に入っているように見える素敵なポータブル ライブラリにまとめてくれました

基本的に、そのライブラリは、通常の描画と「bitblt-ing」(別名ビットブロック転送) 機能へのアクセスを提供します。これで、不透明な画像の上に透明な画像を「blt」して、わずか数行のコードでコンポジットを取得できるはずです。混乱もループもありません...これが役立つことを願っています-ck

于 2013-04-22T20:39:12.673 に答える