GDI+:如何在后台线程上将 Graphics 对象渲染为位图?

2023-12-12

我想使用 GDI+ 在后台线程上渲染图像。我发现这个例子关于如何使用 GDI+ 旋转图像,这是我想做的操作。

private void RotationMenu_Click(object sender, System.EventArgs e)
{
    Graphics g = this.CreateGraphics();
    g.Clear(this.BackColor);
    Bitmap curBitmap = new Bitmap(@"roses.jpg"); 
    g.DrawImage(curBitmap, 0, 0, 200, 200);  

    // Create a Matrix object, call its Rotate method,
    // and set it as Graphics.Transform
    Matrix X = new Matrix();
    X.Rotate(30);
    g.Transform = X;  

    // Draw image
    g.DrawImage(curBitmap, 
    new Rectangle(205, 0, 200, 200), 
        0, 0, curBitmap.Width, 
        curBitmap.Height, 
        GraphicsUnit.Pixel);  

    // Dispose of objects
    curBitmap.Dispose();
    g.Dispose(); 
} 

我的问题有两个部分:

  1. 你会如何完成this.CreateGraphics()在后台线程上?是否可以?我的理解是 UI 对象是this在这个例子中。因此,如果我在后台线程上进行此处理,我将如何创建图形对象?

  2. 完成处理后,如何从我正在使用的 Graphics 对象中提取位图?我还没有找到一个很好的例子来说明如何做到这一点。


另外:格式化代码示例时,如何添加换行符?如果有人能给我留言解释我真的很感激。谢谢!


要在位图上绘图,您不想创建GraphicsUI 控件的对象。你创建一个Graphics使用位图对象FromImage method:

Graphics g = Graphics.FromImage(theImage);

A Graphics对象不包含您绘制的图形,它只是在另一个画布上绘制的工具,该画布通常是屏幕,但也可以是Bitmap object.

因此,您不是先绘制然后提取位图,而是先创建位图,然后创建Graphics要在其上绘制的对象:

Bitmap destination = new Bitmap(200, 200);
using (Graphics g = Graphics.FromImage(destination)) {
   Matrix rotation = new Matrix();
   rotation.Rotate(30);
   g.Transform = rotation;
   g.DrawImage(source, 0, 0, 200, 200);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GDI+:如何在后台线程上将 Graphics 对象渲染为位图? 的相关文章

随机推荐

  • 将参数传递给 OPENQUERY

    为什么以下查询不起作用 它给了我错误 附近的语法不正确 SELECT INTO tmpTable FROM OPENQUERY 127 0 0 1 EXEC DB dbo SP inventory StoreId StartDate End
  • JSF 2.2 HTML5 传递属性

    我正在尝试使用 JSF 2 2 创新 html5 传递属性功能 适用于 m09 版本的组件标签上的名称空间属性
  • 从 python 脚本更改目录:如何不打开新的 shell [重复]

    这个问题在这里已经有答案了 我有以下代码 import os unixshell os environ SHELL dir home user somewhere if os path isdir dir os chdir dir os s
  • Android:添加GMT时区后显示时间

    我正在开发一个应用程序 我想在其中显示通知时间 我可以显示通知时间 但无法在其中添加时区 我当前的位置是巴基斯坦 我想添加 GMT 5 00 我的代码已附上 String currentDateTimeString DateFormat g
  • 葡萄牙/西班牙口音与 jsPDF

    如何在使用 jsPDF 生成的 PDF 文件中获取特殊字符 文本通过 AJAX 动态加载 一些可能的字符是 and 到目前为止 我还不知道如何做到这一点 你必须下载最新版本的 jsPDF 会有一个名为 jspdf plugin standa
  • 无法从 JSP 访问 WEB-INF 下定义的 CSS 文件

    我使用 Maven 创建了 Struts2 应用程序 在此应用程序中 我创建了两个命名空间 第一个是tc第二个是cmpui 我正在尝试从 JSP 页面访问 css文件 但它给了我 404 错误 JSP页面的位置是 webapp tc lay
  • 从 golang 中的字节数组中解压缩 gzip

    我有一堆来自一些网络请求的文件 其中一些是 gzip 压缩的 我需要解压它们并将它们打印为字符串 这是我第一次尝试使用 golang 我尝试了一些在网上找到的示例 但无法正常工作 这是我尝试的最后一个测试 package main impo
  • 如何在 Spotify 应用程序 API 中创建类似“轮播”的小部件?

    Is it possible using the spotify apps API to create one of these widgets filled with my data of choice 是的 通过使用 import sc
  • WCF - 无需 app.config 即可使用

    我有一个调用 WCF 服务的 SharePoint 工作流 只要工作流在 IIS 下运行并且不转移到计时器服务 这种方法就可以正常工作 问题是计时器服务无法访问从计时器服务上下文设置 WCF 连接所需的 web config 设置 Coul
  • 有什么办法可以直接进入Android中的“启用USB调试”页面吗?

    是否有直接进入 启用 USB 调试 切换的 Intent 或请求启用它的方法 情况说明 我们有一个应用程序 用于同时在多部手机上进行测试 并且它们都启用了开发人员模式 不过全部刷新后需要开启usb调试 我们知道如何通过 ADB 执行此操作
  • 使用 keras 可以在训练过程中实时获取输出层吗?

    我尝试在训练期间获得输出层 我正在尝试对模型进行实时 3D 可视化并使其具有交互性 我正在使用谷歌colab与tensorflow 2 0和python 3 这是我的代码 Imports from future import absolut
  • 如何使用 Social-auth-app-django 刷新令牌?

    I use Python 社交身份验证 Django登录我的用户 我的后端是微软 所以我可以使用微软图谱但我认为这不相关 Python Social Auth 处理身份验证 但现在我想调用 API 为此 我需要一个有效的访问令牌 继用例我可
  • 使用 p2 查询语言在 p2 存储库中查找单元的命令行

    p2 有一个查询语言允许对 p2 存储库的内容运行查询 然而 所有的例子文档假设查询语言是在 Java 内部使用的 例如 IQuery
  • 覆盖静态字段

    我正在为我的游戏编写 C 游戏引擎 但遇到了问题 我需要为每种不同类型的块执行 XNA Rectangle drawRectangle 块存储在块列表中 因此必须重写该属性 以便可以通过绘制访问而无需进行大量投射 我尝试了很多方法 但没有一
  • 当 fastcgi 后端偶尔使用内容编码进行 gzip 服务时,如何禁用 Nginx 双 gzip 编码?

    如果后端已经设置了 content encoding 标头 是否有任何聪明的方法可以欺骗 nginx 停止 gzip Nginx 配置为对 php fastcgi 后端的输出进行 gzip 压缩 这在 99 的情况下都很有效 除了极少数情况
  • Xamarin Forms:隐藏 ListView 中的滚动条

    有没有一种简单的方法可以隐藏 ListView 中的滚动条 但仍使其可滚动 您可以为每个平台制作自定义 ListView 渲染器 http developer xamarin com guides cross platform xamari
  • 如何识别弹出窗口之外的点击?

    我有一个弹出窗口 在单击内部时消失 但我的目的是使其在单击外部时消失 目前 弹出窗口工作正常 但每当我在窗口内单击时它就会消失 当我在窗口外单击时 它会保留下来 我如何让它以相反的方式工作 Code as function deselect
  • 为什么受影响的行在更新/删除成功时返回 0?

    我有以下声明 INSERT INTO infotbl name phone VALUES Alex 9999999 并更新它 UPDATE infotbl SET name Alex Johnes phone 999 34356063 WH
  • Safari 扩展 safari.application 错误

    我正在为 safari 进行扩展 我使用 command 创建了一个上下文项showNote 在调试器中我收到以下错误TypeError Result of expression safari application undefined i
  • GDI+:如何在后台线程上将 Graphics 对象渲染为位图?

    我想使用 GDI 在后台线程上渲染图像 我发现这个例子关于如何使用 GDI 旋转图像 这是我想做的操作 private void RotationMenu Click object sender System EventArgs e Gra