C#:使用字节数组创建位图

2023-12-03

我正在尝试使用以下代码使用字节数组动态创建位图图像

Bitmap GetImage()
{
    IntPtr  ip = Marshal.AllocCoTaskMem(imagesize);

    //some code to fill ip

    Image img =  new Bitmap(
                    w,
                    h,
                    -stride,
                    PixelFormat.Format24bppRgb,
                    (IntPtr)(ip.ToInt32() + imagesize - stride)
                    );

    Marshal.FreeCoTaskMem( ip); // Comment this line to work

    return img;
}

void SaveImage()
{
    Image img =  GetImage();
    img.save("test.bmp"); // This call fails
    img.Dispose();
}

现在我的问题是我想返回一个位图,但同时我不想保留 ip 指针,因为分配的内存会泄漏。它永远不会被释放。 如何返回使用字节数组创建的图像,而不打扰函数 GetImage() 的调用者来释放内存。


最简单的方法可能是创建位图(尽管在类似的代码我用过普通的byte[]然后一个fixed阻止,而不是直接使用AllocCoTaskMem),然后创建一个second Bitmap大小相同。称呼Graphics.FromImage在第二个位图上,然后Graphics.DrawImage使用first位图有效地将第一个位图的内容复制到第二个位图上。然后你可以打电话Dispose在第一个位图上,释放内存,并使用第二个位图,它基本上是一个副本。

如果您更精通图像内容,很可能有一种更有效的方法来做到这一点,但如果您只是在寻找一种让它发挥作用的方法,那么这是一个起点:)

编辑:zachrrs 的评论确实使使用更容易位图(图像)构造函数:

using (Bitmap original = new Bitmap(...))
{
    Bitmap copy = new Bitmap(originalImage);
    // Then return "copy" from your method, and you can free the
    // memory
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#:使用字节数组创建位图 的相关文章

  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 通过 htaccess 将 PNG 解析为 PHP 仅适用于本地服务器,但不适用于网络服务器

    我用 PHP 创建了一个动态 PNG 图片 为了使用 PNG 扩展名 我创建了一个包含以下内容的 htaccess 文件 AddType application x httpd php png 在我的本地 XAMPP 服务器上 一切工作正常
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur

随机推荐

  • 不存在 ID 为 *id* 的消息

    我正在尝试列出通过 mandrill API 发送的电子邮件 我可以通过打电话列出它们https mandrillapp com api 1 0 messages search json 这给了我一个列表 其中包含一堆已发送的消息以及一个
  • 保留通用变量之间的类型限制

    假设我们有一些类有一个重要的泛型变量T另一个类有两个字段 一个包含 一个不包含 class Wrapper
  • C++ 调用非默认构造函数作为成员[重复]

    这个问题在这里已经有答案了 假设我有一个类 A 和一个类 B B 用作 A 中的成员 B 没有默认构造函数 但需要参数 class B B int i class A B m B A m B 17 this gives an error 我
  • 当应该使用 String 时,groupingBy 将键的对象返回为 Map

    假设我有一个品牌对象列表 POJO 包含返回字符串的 getName 我想建立一个Map
  • R 记录脚本的显示名称

    这是我当前问题的一个原子示例 目前我有一个包含多个 R 脚本的项目 全部位于名为 DIR 的同一目录中 我在 DIR 中有一个主脚本 它获取所有 R 文件 并包含一个基本配置 basicConfig 我在 DIR 中使用了两个脚本 dog
  • C++:重复执行 do while 循环

    我对这个超级新手问题感到非常抱歉 但我一生都无法理解如何重复 do while 循环 我将 while 循环更改为 do while 循环 现在我不知道如何让它询问 您想重复 Y 还是 N 有什么解释吗 我读过各种完成 do while 循
  • 如何使用 jQuery 访问多维 JSON 数组中的值

    因此 我使用 getJSON 获取多维 JSON 数组 并且想要访问数组中的值 但无法访问比数组中第一个元素更长的值 producers producer id 1 name Em u00e5mejeriet address Grenv u
  • 异步承诺返回函数的同步与异步执行

    当制作返回承诺的异步函数时 在每个实现中我都看到了这种做法 function asyncFunction return new Promise resolve reject gt the function code if condition
  • WPF WebBrowser 控件中的持久 cookie?

    我正在使用 WPF WebBrowser 在应用程序内显示在线帮助 只是一些小网页 其中一些页面使用 cookie 仅在页面被查看的前几次显示项目 这是 为什么不尝试 X 类型的事情 但是 由于某种原因 cookie 似乎无法在 WebBr
  • 模糊效果 CSS3 Firefox(linux)

    如果用户未注册 我试图在我的相册上获得模糊效果 我明白了 但仅限于 chrome 在我的 Firefox 14 0 1 linux 中我无法让它工作 我的html模板 我在django下开发 h2 Gallerie h2 ul class
  • matplotlib 3D 图,plot_surface 黑色

    我有以下数据 https www dropbox com s u7ee09chaixw5vb draw dl 0 它是使用python3中的pickle保存的 它只是一个二维的python列表 形式为z 我使用以下代码绘制 3D 图形 但它
  • 命名空间的自定义配置节问题的智能感知

    我刚刚滚动了一个自定义配置部分 为 Intellisense 创建了一个随附的架构文档 并将其添加到 Web config 的 Schemas 属性中迈克尔 斯图姆的回答另一个类似的问题 不幸的是 可能由于我以有限的知识手工创建 XSD I
  • 如何使用字符串设置 jQueryUI Datepicker 的 minDate/maxDate?

    jQueryUI 日期选择器文档指出可以使用 当前日期格式中的字符串 来设置 minDate 选项 所以我尝试了以下方法来初始化日期选择器 input date datepicker minDate 01 01 2010 maxDate 1
  • 融合具有列模式的 data.table

    我有一个data table看起来像这样 id A1g hi A2g hi A3g hi A4g hi 1 2 3 4 5 我想melt这张表看起来像这样 id time hi 1 1 2 1 2 3 1 3 4 1 4 5 我尝试过这样的
  • 连接 __contains 和 __in 最简单的方法是什么?

    我正在做标签搜索功能 用户可以观察很多标签 我将所有标签都放在一个元组中 现在我想找到包含列表中至少一个标签的所有文本 象征性 text contains in asd dsa 我唯一的想法是循环 例如 q text objects all
  • “分段错误”与“运行时”错误? [复制]

    这个问题在这里已经有答案了 考虑一下这段代码片段 char str hellow Ghost str 0 z printf s str 这是一个分段错误 它还会出现运行时内存错误吗 我对分段错误的理解是 当您访问不属于您的内存时出现分段错误
  • Spring Boot 无法拦截执行器访问

    在Spring Boot 2 1 6版本中无法拦截访问执行器请求现在我有一个全局拦截器 Component public class ServiceFilter implements HandlerInterceptor log4j sta
  • 提升以固定单子变压器堆栈的“内部”

    假设我有一个IO Int包裹在一个StateT MyState 那么我的值为State MyState Int我想在堆叠单子中使用它 我如何在这种内在的意义上提升它 我已经知道使用lift or liftIO如果我得到与内部兼容的东西 我只
  • 编译为字节码,Java 与 Python。造成所用时间差异的原因是什么? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 Java 和 python 仅谈论 CPython 都分别解释为 Java 和 CPython 字节码 然后 两个字节码都由各自的虚拟机 JVM 和 Cpython VM 解释
  • C#:使用字节数组创建位图

    我正在尝试使用以下代码使用字节数组动态创建位图图像 Bitmap GetImage IntPtr ip Marshal AllocCoTaskMem imagesize some code to fill ip Image img new