The*_*Man 2 c# wpf windows-10 uwp
我试图让SoftwareBitmapWPF 中的东西可以使用Bitmap. 像这个问题这样的方法看起来很有希望,但它们似乎使用来自不同命名空间的对象,这些对象在我的情况下不太适用。对于上下文,我MediaCapture在我的 WPF 应用程序中使用来自 UWP 的土地进行网络摄像头流式传输。
public static WriteableBitmap WriteableBitmapFromSoftwareBitmap(SoftwareBitmap soft)
{
WriteableBitmap writeable = new
WriteableBitmap(soft.PixelWidth, soft.PixelHeight);
soft.CopyToBuffer(writeable.PixelBuffer);
return writeable;
}
public static Bitmap BitmapFromWriteableBitmap(WriteableBitmap writeBmp)
{
Bitmap bmp;
using (MemoryStream outStream = new MemoryStream())
{
System.Windows.Media.Imaging.BitmapEncoder enc = new
BmpBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(writeBmp)); // Error here
enc.Save(outStream);
bmp = new Bitmap(outStream);
}
return bmp;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,在 中BitmapFromWriteableBitmap,对 的调用BitmapFrame.Create抱怨它无法从那种WriteableBitmap.
请注意,WriteableBitmap是 a Windows.UI.Xaml.Media.Imaging.WriteableBitmap,SoftwareBitmap是 a Windows.Graphics.Imaging.SoftwareBitmap,而所需的Bitmap是 a System.Drawing.Bitmap。
没有直接转换。您需要从 SoftwareBitmap 中提取图像数据,然后从该数据创建新的位图。
这基本上是链接问题所做的:它将 WriteableBitmap 中的数据编码为 .BMP 流,然后从该流加载 System.Drawing.Bitmap。
您可以使用Windows.Graphics.Imaging.BitmapEncoder从 SoftwareBitmap 执行相同操作 。SetSoftwareBitmap将其内容转换为图像流,然后从该流创建一个新的 System.Drawing.Bitmap。
有关示例代码,请参阅使用 BitmapEncoder 将 SoftwareBitmap 保存到文件。您可以渲染到InMemoryRandomAccessStream而不是 StorageFile 的流以避免保存到磁盘,并且可以使用AsStream将其转换为 .Net System.IO.Stream 以读入 System.Drawing.Bitmap 类似于以下(未经测试的)片段:
using (var stream = new Windows.Storage.Streams.InMemoryRandomAccessStream())
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
encoder.SetSoftwareBitmap(softwareBitmap);
await encoder.FlushAsync();
bmp = new System.Drawing.Bitmap(stream.AsStream());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2864 次 |
| 最近记录: |