WPF中如何直接在位图(BitmapSource、WriteableBitmap)上绘图?

2023-11-22

在 GDI+ Winforms 中我会这样做:

Bitmap b = new Bitmap(32,32);
Graphics g = Graphics.FromImage(b); 
//some graphics code...`

如何使用 DrawingContext 在 WPF 中执行相同的操作?


我看到这个问题是在 2011 年提出的,但我坚信迟到总比不到好,唯一的其他“答案”不符合本网站正确答案的标准,所以我将提供自己的答案来帮助其他找到答案的人这个问题在未来。

这是一个简单的示例,展示了如何绘制矩形并将其保存到磁盘。可能有更好(更简洁的方法)来做到这一点,但可惜的是,我在网上找到的每个链接都会产生相同的“耸耸肩,我不知道”答案。

        public static void CreateWpfImage()
        {
            int imageWidth = 100;
            int imageHeight = 100;
            string outputFile = "C:/Users/Krythic/Desktop/Test.png";
            // Create the Rectangle
            DrawingVisual visual = new DrawingVisual();
            DrawingContext context = visual.RenderOpen();
            context.DrawRectangle(Brushes.Red, null, new Rect(20,20,32,32));
            context.Close();

            // Create the Bitmap and render the rectangle onto it.
            RenderTargetBitmap bmp = new RenderTargetBitmap(imageWidth, imageHeight, 96, 96, PixelFormats.Pbgra32);
            bmp.Render(visual);

            // Save the image to a location on the disk.
            PngBitmapEncoder encoder = new PngBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bmp));
            encoder.Save(new FileStream(outputFile, FileMode.Create));
        }

据我所知, RenderTargetBitmap 被视为 ImageSource,因此您应该能够直接将其链接到 wpf 控件的图像源,而无需进行任何类型的转换。

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

WPF中如何直接在位图(BitmapSource、WriteableBitmap)上绘图? 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 找不到/安装 libXtst.so.6?

    我正在运行 Ubuntu 12 10 并尝试安装 Netbeans 7 1 或更高版本 我有 sh 文件 但无法安装 错误出现在此处 2013 06 27 19 11 28 918 at org netbeans installer Ins
  • BeginThread 结构 - Delphi

    我现在已经有了一个即将完成的应用程序 我想要实现的下一个功能是线程 我选择使用 BeginThread 尽管我知道 delphi 中的 TThread 我遇到的问题是 BeginThread 调用的结构 通常 程序中调用我想要线程化的函数的
  • 让 pygame 在 Macos 上显示除空白屏幕之外的任何内容时出现问题

    我最近买了一台新 MacBook 我一直在不断地尝试pygame去工作 但还没有成功 我变得非常绝望 我真的需要一些帮助 我已经安装了pygame 1 9 4即使我在运行时没有收到任何错误消息pygame代码 它不会向我显示任何内容 除了空
  • 动态数据透视表中的行和列总计

    在 SQL Server 2008 中 我有一个包含 3 列的表 tblStock 零件代码 NVARCHAR 50 库存数量 INT 位置 NVARCHAR 50 下面是一些示例数据 PartCode StockQty Location
  • 如何向 jQuery 点击函数发送多个参数?

    目前我正在使用类似的东西 myclass click function var msg this attr id alert msg 和 HTML lt a href class myclass id 101 gt Link 如果我需要其他
  • 方法集(指针与值接收器)

    我很难理解为什么这些规则与指针类型 vs 的方法集相关联 值类型 有人可以解释一下原因吗 从接口表的角度 摘自威廉 肯尼迪博客的片段 Values Methods Receivers T t T T t T and t T Methods
  • 如何仅更改 DOM 元素中的文本而不替换任何子元素

    嗨 我有一个简单的 html 结构 h1 Title text span inner text span h1 我想要的是仅替换文本 标题文本 而不打扰 span 文本 这可能吗 我不想添加任何其他 dom 元素 我想保留该结构 我当然一直
  • 为什么图形坐标是从左上角开始测量的?

    我注意到我使用过的每个计算机图形系统都使用左手坐标系 其原点位于左上角 Cairo Java Microsoft XYZ 和大多数图形程序都使用此系统 我认为它们都可以追溯到一个共同的祖先 但我找不到任何关于此的参考资料 如果我不得不猜测的
  • 有没有办法安装旧版本的Android平台工具?

    我下午一直在四处寻找 看看是否有任何方法可以安装旧版本的Android platform tools 我试过通过sdkmanager和较年长的android版本 但所有这些似乎总是链接到最新版本platform tools 我正在尝试这样做
  • pip 在 Mac OS X Mavericks (10.9) 上引发 stdio.h 未找到错误

    此时我已经尝试了无数的解决方案 但似乎没有任何效果 我正在尝试安装 mysql python 但是 numpy 和其他需要 gcc 的软件包也会发生这种情况 building mysql extension gcc 4 2 fno stri
  • 如何用java实现TCP服务器和TCP客户端传输文件

    我已经实现了简单的TCP服务器和TCP客户端类 它们可以将消息从客户端发送到服务器 并且消息将在服务器端转换为大写 但是如何实现从服务器传输文件到客户端以及从客户端上传文件到服务器 以下代码是我得到的 TCPClient java impo
  • 如何在 Word 中对 RMarkdown 文档中的标题进行正确编号

    我正在创建一个 RMarkdown 文档 希望使用 RStudio 将其导出到 MS Word 中 我想要一个目录和编号标题 这是我的示例 Markdown 文档 title Test author Ben date r format Sy
  • 如何在 Grails 中复制域对象?

    我想复制一个域对象 实现这一目标的最简单方法是什么 我意识到我可以创建一条新记录 然后迭代每个字段 逐个字段复制数据 但我认为必须有一种更简单的方法来做到这一点 在 Rails 中 有一个简单的方法可以做到这一点 rails lt 3 1
  • 在 MVC 中,部分视图会继承其父视图的模型吗?

    我正在将一些数据从我的控制器传递到视图 我希望将其显示在该视图内的部分视图中 不要问 这很复杂 我知道我可能甚至不应该将模型传递给另一个视图的视图 但我注意到部分视图实际上是从父视图继承模型 public ActionResult Inde
  • 从手机浏览器获取位置数据

    我正在开发一个网络应用程序 该应用程序会经常受到移动浏览器的攻击 我想知道是否有办法从浏览器请求中获取足够的信息来查找位置数据 三角测量或 GPS 当然 不是直接来自请求 一位同事建议 一些运营商在请求标头中提供唯一标识符 该标识符可以发送
  • 使用 ggplot2 重现以下基本图

    I d like to reproduce the following base graph with ggplot2 以下是R生成该图的代码 set seed 12345 Data lt matrix data rnorm n 30 me
  • 类型错误:Ajv 不是构造函数

    我有这个课程 我尝试实例化Ajv使用 new 关键字 我收到此错误 类型错误 Ajv 不是构造函数 Code import as Ajv from ajv export class ValidateJsonService validateJ
  • 解决 Looper.java 中的非空和非空符号的问题

    我正在开发一个 Android 应用程序 请帮助我解决依赖错误 package android os import android support annotation NonNull import android support anno
  • 限制CPU负载或设置进程优先级

    这不是我第一次从我的主机收到 CPU 负载过高的警告 该代码只是一些带有 mysql 查询的随机 php 脚本 没什么花哨的 这些表格没什么特别的 最多几百行 如果需要的话我总是限制它们 我不介意它运行 0 15 秒而不是 0 05 秒 那
  • WPF中如何直接在位图(BitmapSource、WriteableBitmap)上绘图?

    在 GDI Winforms 中我会这样做 Bitmap b new Bitmap 32 32 Graphics g Graphics FromImage b some graphics code 如何使用 DrawingContext 在