簡體   English   中英

Windows Phone運行時:RendertargetBitmap / IBuffer到Base64,反之亦然

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM