に背景色を追加します。私は複数のPNG画像を1つのビデオに結合することに成功しました。ただし、作成されたファイルには黒い背景があります。最初に私は、ファイルがファイルをPNG形式いたので、これはあるかもしれないと思ったが、同じbevaviourはJPGのみのために発生します。画像を保存する方法は次のとおりです。は私がMediaCompositionを作成しようとしているMediaComposition
public async Task<bool> Save(InkCanvas canvas, StorageFile file)
{
if (canvas != null && canvas.InkPresenter.StrokeContainer.GetStrokes().Count > 0)
{
if (file != null)
{
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
await canvas.InkPresenter.StrokeContainer.SaveAsync(stream);
}
}
Clear(canvas);
return true;
}
return false;
}
画像は保存されますが、背景はアルファです。これが意味することは、私が試してみて、培地組成物に一緒にこれらをチェーンするとき、バックグラウンドがないことであり、それは黒としてレンダリングされます。私はMediaCompositionを作成するときに、これを修正するためにオーバーレイを使用して試してみました:
MediaClip overlayVideoClip = MediaClip.CreateFromColor(Colors.White, new TimeSpan(0, 1, 0));
MediaOverlay mo = new MediaOverlay(overlayVideoClip);
MediaOverlayLayer mol = new MediaOverlayLayer();
mol.Overlays.Add(mo);
composition.OverlayLayers.Add(mol);
しかし無駄に。私の疑問は、この場合、用語オーバーレイの意味を誤解しているということです。だから、私の質問です:それは可能な場合、どのように構成時にビデオをオーバーレイすることができますか?あるいは、イメージ自体でこれを行う必要がある場合、イメージをバックグラウンドで保存するにはどうすればよいですか?
編集:
これで進捗状況(?)を作成しました。以下のコンパイルおよび実行されますが、ベタ黒画像を作成します。
public async Task TestSave(InkCanvas canvas, StorageFile file)
{
RenderTargetBitmap rtb =
new RenderTargetBitmap();
PixelFormats.Pbgra32);
await rtb.RenderAsync(canvas);
var pixelBuffer = await rtb.GetPixelsAsync();
using (IRandomAccessStream stream =
await file.OpenAsync(FileAccessMode.ReadWrite))
{
BitmapEncoder encoder =
await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
encoder.SetPixelData(BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Straight,
(uint)rtb.PixelWidth,
(uint)rtb.PixelHeight,
96d, 96d,
pixelBuffer.ToArray());
await encoder.FlushAsync();
}
}
編集:私は、ソートのWin2Dライブラリを使用して問題を解決しthis答えを見つけ
。それは私の実際の問題に対処していませんが、私はそれを回避することができます。うまくいけば、そこにはもっと良い解決策があります。このことについて、私は理解して
あなたがやろうとしているかは明らかではありません。アルファ背景なしで画像を保存するだけですか? –
画像を背景で保存するか、またはビデオファイルの作成時に背景を重ねる(現在はMediaCompositionを使用) –