Windows Phone Runtime:RendertargetBitmap/IBuffer to Base64,反
本文关键字:to Base64 IBuffer Phone Runtime RendertargetBitmap Windows | 更新日期: 2023-09-27 17:57:10
我目前正在尝试将我从RenderTargetBitmap获得的IBuffer转换为Base64String,反之亦然。我在 Silverlight 中成功地做了类似的事情,但现在在 Windows 运行时中缺少太多库,我不知道现在该尝试什么。
下面是我最新的示例代码,它不会出错,但是当我尝试运行它时,它会让我的应用程序崩溃。有什么建议吗?
提前致谢
var bitmap = new RenderTargetBitmap();
await bitmap.RenderAsync(drawingPanel);
IBuffer pixel = await bitmap.GetPixelsAsync();
String b64 = CryptographicBuffer.EncodeToBase64String(pixel);
IBuffer backpixel = CryptographicBuffer.DecodeFromBase64String(b64);
WriteableBitmap wb = new WriteableBitmap(bitmap.PixelWidth, bitmap.PixelHeight);
wb.SetSource(backpixel.AsStream().AsRandomAccessStream());
imageBox.Source = wb;
imageBox 是一个 XAML 元素,用于检查转换是否成功
编辑:我没有得到这个代码的例外,应用程序只是冻结
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(MyCanvas);
var bitmap = renderTargetBitmap;
var img = (await bitmap.GetPixelsAsync()).ToArray();
var encoded = new InMemoryRandomAccessStream();
var encoder = await BitmapEncoder.CreateAsync(
BitmapEncoder.PngEncoderId, encoded);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight,
(uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96, 96, img);
await encoder.FlushAsync();
encoded.Seek(0);
var bytes = new byte[encoded.Size];
await encoded.AsStream().ReadAsync(bytes, 0, bytes.Length);
return Convert.ToBase64String(bytes);
有时这对我有用,可悲的是它有时仍然会出错,但我不知道为什么
使用以下,我想我会工作的
var bitmap = new RenderTargetBitmap();
await bitmap.RenderAsync(drawingPanel);
IBuffer pixel = await bitmap.GetPixelsAsync();
Stream stream = pixel.AsStream();
BitmapImage bitmapImage = new BitmapImage();
using (IRandomAccessStream raStream = stream.AsRandomAccessStream())
{
bitmapImage.SetSource(raStream);
}
imageBox.Source = bitmapImage;