(UWP) 将网格另存为 png

2024-03-17

我正在开发一个 UWP 应用程序,它有一个带有子项、图像和文本块的网格。我有两件事想要实现并需要帮助。

  1. 如何使用预定义名称将 Grid 元素及其子内容作为图像(最好是 PNG)保存在本地文件夹中?

  2. 如何检索此保存的图像,然后将其作为附件与其他兼容的应用程序共享?

Example:

    <StackPanel Orientation="Vertical">
        <Grid Name="myGrid"
              HorizontalAlignment="Stretch"
              Background="Black">

            <Image Name="myImage"
                   Source="Assets/image1.png"
                   Stretch="Uniform"/>

            <TextBlock Name="myTextBlock"
                       HorizontalAlignment="Center"
                       VerticalAlignment="Center"
                       TextWrapping="Wrap"
                       Text="Sample user text"/>
        </Grid>

        <Button Name="saveButton"
                Content="Save"
                Margin="10,10,0,0"
                Click="saveButton_Click" />

        <Button Name="shareButton"
                Content="Share"
                Margin="10,10,0,0"
                Click="shareButton_Click" />
    </StackPanel>

编辑:在 saveButton_Click 事件中尝试了这段代码。似乎不起作用。

    RenderTargetBitmap rtb = new RenderTargetBitmap();
    await rtb.RenderAsync(myGrid);

    var pixelBuffer = await rtb.GetPixelsAsync();
    var pixels = pixelBuffer.ToArray();

    var displayInformation = DisplayInformation.GetForCurrentView();

    var stream = new InMemoryRandomAccessStream();
    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
    encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                         BitmapAlphaMode.Premultiplied,
                         (uint)rtb.PixelWidth,
                         (uint)rtb.PixelHeight,
                         displayInformation.RawDpiX,
                         displayInformation.RawDpiY,
                         pixels);

    await encoder.FlushAsync();
    stream.Seek(0);

    FileStream filestream = File.Create("C:\\Users\\pcUser\\Desktop\\testimage.png", (int)stream.Size);

EDIT2:尝试了这段代码。它似乎有点工作,但我只得到一个黑色图像,这可能是因为它只保存 myGrid,而不是儿童内容。

    RenderTargetBitmap rtb = new RenderTargetBitmap();
    await rtb.RenderAsync(quoteGrid);

    var pixelBuffer = await rtb.GetPixelsAsync();
    var pixels = pixelBuffer.ToArray();

    var displayInformation = DisplayInformation.GetForCurrentView();

    var stream = new InMemoryRandomAccessStream();
    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
    encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                         BitmapAlphaMode.Premultiplied,
                         (uint)rtb.PixelWidth,
                         (uint)rtb.PixelHeight,
                         displayInformation.RawDpiX,
                         displayInformation.RawDpiY,
                         pixels);

    await encoder.FlushAsync();
    stream.Seek(0);

    var wbm = new WriteableBitmap(rtb.PixelWidth, rtb.PixelHeight);
    await wbm.SetSourceAsync(stream);

    StorageFolder folder = ApplicationData.Current.LocalFolder;
    if (folder != null)
    {
        StorageFile file = await folder.CreateFileAsync("testImage" + ".png", CreationCollisionOption.ReplaceExisting);
        using (var storageStream = await file.OpenAsync(FileAccessMode.ReadWrite))
        {
            encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, storageStream);
            var pixelStream = wbm.PixelBuffer.AsStream();
            await pixelStream.ReadAsync(pixels, 0, pixels.Length);
            encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, (uint)wbm.PixelWidth, (uint)wbm.PixelHeight, displayInformation.RawDpiX, displayInformation.RawDpiY, new byte[pixelStream.Length]);
            await encoder.FlushAsync();
        }
    }

如何使用预定义名称将 Grid 元素及其子内容作为图像(最好是 PNG)保存在本地文件夹中?

我检查了你的代码。你不需要使用WriteableBitmap,只需将文件流传递给BitmapEncoder.CreateAsync方法。详情请检查以下代码:

private async void saveButton_Click(object sender, RoutedEventArgs e)
{
        RenderTargetBitmap rtb = new RenderTargetBitmap();
        await rtb.RenderAsync(myGrid);

        var pixelBuffer = await rtb.GetPixelsAsync();
        var pixels = pixelBuffer.ToArray();
        var displayInformation = DisplayInformation.GetForCurrentView();
        var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("testImage" + ".png", CreationCollisionOption.ReplaceExisting);
        using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
        {
            var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
            encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                                 BitmapAlphaMode.Premultiplied,
                                 (uint)rtb.PixelWidth,
                                 (uint)rtb.PixelHeight,
                                 displayInformation.RawDpiX,
                                 displayInformation.RawDpiY,
                                 pixels);
            await encoder.FlushAsync();
        }
}

如何检索此保存的图像,然后将其作为附件与其他兼容的应用程序共享?

对于您的情况,您将图片保存在本地文件夹中。所以如果你想获取它,你需要使用Storage API。例如:

var file = await ApplicationData.Current.LocalFolder.GetFileAsync("testImage.png");

关于“将其作为附件分享给其他兼容的应用程序”,您可以参考官方共享内容源应用程序示例 https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/ShareSource了解详情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(UWP) 将网格另存为 png 的相关文章

  • 分段错误(核心转储)错误

    我的程序编译罚款 但在输入文件时出现 分段错误 核心转储 错误 我没有正确处理 ostream 吗 include
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • 在 C# 中生成 HMAC-SHA1

    我正在尝试使用 C 来使用 REST API API 创建者提供了以下用于 hmac 创建的伪代码 var key1 sha1 body var key2 key1 SECRET KEY var key3 sha1 key2 var sig
  • SSL/TLS/HTTPS 站点在 C#/.NET WebBrowser 控件中非常慢,但在 Internet Explorer 中则很好

    背景 我正在修改自动维基浏览器 http en wikipedia org wiki Wikipedia AutoWikiBrowser使用托管在安全服务器上的 MediaWiki 站点 我允许用户通过 C 应用程序中的 WebBrowse
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • 为什么大多数平台上没有“aligned_realloc”?

    MSVC有自己的非标准函数 aligned malloc aligned realloc and aligned free C 17和C11引入了 std aligned alloc 其结果可以是de分配有free or realloc B
  • SFINAE 如何使用省略号?

    过去 当使用 SFINAE 选择构造函数重载时 我通常使用以下内容 template
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 2D morton 码编码/解码 64 位

    如何将给定 x y 的莫顿代码 z 顺序 编码 解码为 32 位无符号整数 生成 64 位莫顿代码 反之亦然 我确实有 xy2d 和 d2xy 但仅适用于 16 位宽的坐标 产生 32 位莫顿数 在网上查了很多 但没有找到 请帮忙 如果您可
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • 为什么具有相同名称但不同签名的多个继承函数不会被视为重载函数?

    以下代码片段在编译期间产生 对 foo 的调用不明确 错误 我想知道是否有任何方法可以解决此问题而不完全限定对 foo 的调用 include
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • C# 中的常量和只读? [复制]

    这个问题在这里已经有答案了 可能的重复 const 和 readonly 之间有什么区别 https stackoverflow com questions 55984 what is the difference between cons
  • 二叉树中的 BFS

    我正在尝试编写二叉树中广度优先搜索的代码 我已将所有数据存储在队列中 但我不知道如何访问所有节点并消耗它们的所有子节点 这是我的 C 代码 void breadthFirstSearch btree bt queue q if bt NUL
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • .NET 客户端中 Google 表格中的条件格式请求

    我知道如何在 Google Sheets API 中对值和其他格式进行批量电子表格更新请求 但条件格式似乎有所不同 我已正确设置请求 AddConditionalFormatRuleRequest formatRequest new Add
  • asp.net网格分页的SQL查询

    我在用iBatis and SQLServer 使用偏移量和限制进行分页查询的最佳方法是什么 也许我添加该列ROW NUMBER OVER ORDER BY Id AS RowNum 但这只会阻止简单查询的数据访问 在某些情况下 我使用选择
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • Visual Studio 2017 完全支持 C99 吗?

    Visual Studio 的最新版本改进了对 C99 的支持 最新版本VS2017现在支持所有C99吗 如果没有 C99 还缺少哪些功能 No https learn microsoft com en us cpp visual cpp
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过

随机推荐

  • PyCharm 在带有大数据的 iPython 控制台中长时间挂起

    我看过一些报告 PyCharm 很慢 但我遇到了一个问题 即使与正常操作相比 它似乎也太慢了 我在 pandas 数据框中有大量数据 从 440 MB 的 csv 文件读取 当我在 PyCharm 中使用 ipython 控制台时 每次我尝
  • 在Android中升级数据库的正确方法是什么

    如果我想保留一些旧数据并迁移到新版本的数据库 onUpgrade方法中的正确步骤是什么 保留旧数据 删除旧表 创建新表并插入旧数据 有没有简化版本或者有更好的方法 谢谢 升级数据库 在表中添加新字段 在 onUpgrade 中执行以下步骤
  • Mysql 安装程序显示错误:无法写入内存

    我正在尝试安装 MySql Workbench 并下载mysql 安装程序 web community 5 7 13 0 msi 当我运行此文件时 出现以下错误 0x6d4424ff 处的指令引用了 0x6d4424ff 处的内存 内存无法
  • GoPro:获取每帧时间戳

    我目前正在尝试从使用 GoPro 录制的 MPEG 4 文件中提取每个帧时间戳 我想要相机捕获该帧的确切时间 以便稍后将其与计算机视觉算法结合起来 我知道输出帧率为 25 fps 我使用 ffmpeg 和 ffprobe 以不同的方式提取了
  • 用按钮和JS水平滚动隐藏的overflow-x

    我正在尝试使用右侧 左侧的按钮在具有多个 a 标签的 div 中水平滚动 因此我无法使用相同的按钮滚动到 hashtag 我想做的正是与不同标签的 Google 图片搜索标题一样 prsc overflow x hidden overflo
  • Knockout.js 与多个 Select2 绑定

    我的问题是 当我将 Select2 与 Multiple 和 Knockout 视图模型绑定时 选择其中一个选项后 第二次数据丢失 淘汰码 window load function ko bindingHandlers select2 in
  • 使用 MySQL 在 Android 应用程序中存储和显示表情符号

    我有一个应用程序通过套接字与 NodeJS 服务器通信 该服务器通过 HTTP 与 PHP 通信 并且 PHP 正在使用 MySQL 当我尝试在文本字段中插入表情符号并将其保存到数据库时 当我取回它时 我看到 如果我从维基百科复制表情符号
  • 如何生成阳性预测值 (PPV) 与各种分类截止点的关系图?

    我生成了一些分数来帮助预测某些内容是 是 1 还是 否 0 假设数据包括 scores c 10 20 response c 0 0 1 0 1 0 1 1 0 1 1 mydata data frame scores response 我
  • 用 python 绘制 - 折线图取消选择所有

    我得到了一个折线图 其中有多条线代表不同频率的正弦波 我想看一下特定的波浪 而其余的都不在图表中 我知道我可以在图例中单击我不想看到的线条 这样它们就会消失 我想知道是否有一种交互式方式可以一次单击取消选择所有行 而不是单击每一行 My c
  • 使用 ASP.NET 5 中的默认 DI 容器一次性注册所有服务,类似于 Autofac

    对于 ASP NET 5 已经默认提供了一个 DI 它看起来很有趣 我一直在使用 Autofac 和 MVC 5 它可以选择一次注册所有程序集 下面是在 Autofac 中注册所有以 Service 结尾的类的示例代码 Autofac Co
  • React 和 Typescript 与 webpack 打字问题

    我正在尝试创建一个asyncComponent使用 TypeScript 构建高阶组件 但无法完全获得正确的类型 本质上 这可以在 JS 和 webpack 中工作 const Auth asyncComponent gt require
  • 在 ASP.NET MVC3 RC2 中显示复杂类型

    我有一个使用复杂类型作为属性的模型 namespace Web Models public class Business IModel Key HiddenInput DisplayValue false public Guid ID ge
  • 如何查询从 varchar 类型获取最大 id 和数字中的值?

    我有表和列 ID 值为 1 2 3 10 11 12 13 如何查询 varchar 类型的最大 id 我曾尝试过 select MAX id from table 但结果是9 请帮忙 看起来这些值是字符串 它选择最大的字符串 如果您希望它
  • 将 SQLite 设置为 Laravel 5.1 中单元测试的数据库

    我正在尝试在 Laravel 5 1 中设置单元测试 继文档 http laravel com docs 5 1 testing我看到这个 Laravel 在构建时就考虑到了测试 其实支持测试 PHPUnit 是开箱即用的 and 运行测试
  • CSS Div 背景图像固定高度 100% 宽度

    我正在尝试设置一系列具有背景图像的 div 每个 div 都有自己的固定高度 并拉伸以填充宽度 即使顶部 底部被剪切的溢出也是如此 我只是不想要边缘有空白 目前 我有 http jsfiddle net ndKWN http jsfiddl
  • 如何获取java中创建的日期图片

    我想提取 jpg 文件的创建日期 Java 有 File 对象的 lastModified 方法 但似乎不支持从文件中提取创建日期 我相信这些信息存储在文件中 因为当我将鼠标指针悬停在 Win XP 中的文件上时看到的日期与我在 DOS 中
  • 派生类的成员函数是否继承了基类的虚拟性?

    假设我们有以下两个类 A 是具有虚拟析构函数的基类 B 是其析构函数没有 virtual 限定符的派生类 我的问题是 如果我要从 B 派生更多类 B 的析构函数是否会自动继承虚拟性 或者我需要在 B class A public A std
  • Heroku 已成功部署,但我仍然没有运行任何 Web 进程

    我正在尝试将电报机器人推入 Heroku 这些是我的文件夹中的文件 new bot requirements txt Procfile worker python new bot py init py empty new bot py en
  • Zend Framework 路由:参数数量未知

    我正在尝试为 N 级类别深度编写一条路线 因此 通常的类别 URL 如下所示 http website my category my subcategory my subcategory level3 my subcategory leve
  • (UWP) 将网格另存为 png

    我正在开发一个 UWP 应用程序 它有一个带有子项 图像和文本块的网格 我有两件事想要实现并需要帮助 如何使用预定义名称将 Grid 元素及其子内容作为图像 最好是 PNG 保存在本地文件夹中 如何检索此保存的图像 然后将其作为附件与其他兼