पर पृष्ठभूमि रंग जोड़ें I 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);
लेकिन इसका कोई फायदा नहीं हुआ। मेरा संदेह यह है कि मैं इस मामले में ओवरले शब्द के अर्थ को गलत समझ रहा हूं। तो, मेरे प्रश्न हैं: क्या रचना समय पर वीडियो को ओवरले करना संभव है और यदि हां, तो कैसे? वैकल्पिक रूप से, अगर इसे छवि में ही किया जाना है, तो मैं छवि को पृष्ठभूमि से कैसे सहेज सकता हूं?
संपादित करें:
मैं बनाया है प्रगति इस के साथ; (?) निम्नलिखित compiles और चलाता है, लेकिन एक ठोस काला छवि बनाता है:
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();
}
}
संपादित करें:
मैं this जवाब है, जो एक तरह से Win2D लाइब्रेरी का उपयोग करके समस्या का हल मिल गया; हालांकि यह मेरे वास्तविक मुद्दे को संबोधित नहीं करता है, यह मुझे इसके चारों ओर जाने देता है। उम्मीद है कि वहाँ एक बेहतर समाधान है।
यह स्पष्ट नहीं है कि आप क्या करने की कोशिश कर रहे हैं। बस छवि को अल्फा पृष्ठभूमि के साथ सहेजें? –
या तो छवि को पृष्ठभूमि के साथ सहेजें, या वीडियो फ़ाइल बनाने के समय पृष्ठभूमि को परत करें (वर्तमान में मीडियाकंपोजिशन का उपयोग कर रहे हैं) –