[英]Windows Phone Runtime: RendertargetBitmap/IBuffer to Base64 and vice versa
我目前正在嘗試將我從RenderTargetBitmap獲得的IBuffer轉換為Base64String,反之亦然。 我在Silverlight中成功執行了類似的操作,但是現在在Windows Runtime中缺少了很多庫,我不知道現在該嘗試什么。
下面是我的最新示例代碼,該代碼沒有任何錯誤,但是當我嘗試運行它時,它會使我的應用程序崩潰。 有什么建議么?
提前致謝
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.