首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WritableBitmap到RandomAccessStreamReference

WritableBitmap到RandomAccessStreamReference
EN

Stack Overflow用户
提问于 2013-09-30 08:12:21
回答 1查看 1.3K关注 0票数 0

我有下一个问题:

我使用WinRT XAML工具包(code1)制作了一个屏幕截图

现在我想把这个WritableBitmap附加到电子邮件(code2)上

代码1

代码语言:javascript
复制
WriteableBitmap wb = null;
            var start = DateTime.Now;
            const int count = 1;
            for (int i = 0; i < count; i++)
            {
                wb = await WriteableBitmapRenderExtensions.Render(this);
            }
            var end = DateTime.Now;
            var duration = end - start;
            var renderInS = duration.TotalMilliseconds / count;
            if (renderInS > 0)
            {
                test.Source = wb;
                // HERE MUST BE CODE INCLUDED
            }

代码2

代码语言:javascript
复制
DataPackage requestData = request.Data;
            requestData.Properties.Title = TitleInputBox.Text;
            requestData.Properties.Description = DescriptionInputBox.Text; // The description is optional.

            // It's recommended to use both SetBitmap and SetStorageItems for sharing a single image
            // since the target app may only support one or the other.

            List<IStorageItem> imageItems = new List<IStorageItem>();
            imageItems.Add(this.imageFile);
            requestData.SetStorageItems(imageItems);

            RandomAccessStreamReference imageStreamRef = RandomAccessStreamReference.CreateFromFile(this.imageFile);
            requestData.Properties.Thumbnail = imageStreamRef;
            requestData.SetBitmap(imageStreamRef);
            succeeded = true;

这意味着我需要首先保存图像到本地存储,然后读取和附加它。

问题:

1)如何将WritableBitmap保存到应用程序本地存储中?

2)也许有一种方法不保存图像来附加它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-30 08:33:09

更新

使用WriteableBitmapExMemoryRandomAccessStream的另一种方法

代码语言:javascript
复制
MemoryStream stream = new MemoryStream(MyWriteableBitmap.ToByteArray());
var randomAccessStream = new MemoryRandomAccessStream(stream);
DataPackage requestData = args.Request.Data;
RandomAccessStreamReference imageStreamRef = RandomAccessStreamReference.CreateFromStream(randomAccessStream);

尝试此方法将WriteableBitmap保存到StorageFile

代码语言:javascript
复制
private async Task<StorageFile> WriteableBitmapToStorageFile(WriteableBitmap writeableBitmap)
{
    var picker = new FileSavePicker();
    picker.FileTypeChoices.Add("JPEG Image", new string[] { ".jpg" });
    StorageFile file = await picker.PickSaveFileAsync();
    if (file != null && writeableBitmap != null)
    {
        using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
        {
            BitmapEncoder encoder = await BitmapEncoder.CreateAsync(
                BitmapEncoder.JpegEncoderId, stream);
            Stream pixelStream = writeableBitmap.PixelBuffer.AsStream();
            byte[] pixels = new byte[pixelStream.Length];
            await pixelStream.ReadAsync(pixels, 0, pixels.Length);

            encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore,
                (uint)writeableBitmap.PixelWidth, (uint)writeableBitmap.PixelHeight, 96.0, 96.0, pixels);
            await encoder.FlushAsync();
        }
        return file;
    }
    else
    {
        return null;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19089364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档