我用C#,上一步函数返回了一个IntPtr型的图片指针,我已知图片的长、宽,如何转换成image类。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我用C#,上一步函数返回了一个IntPtr型的图片指针,我已知图片的长、宽,如何转换成image类。相关的知识,希望对你有一定的参考价值。

尝试1:Image mImage = Image.FromHbitmap(m_FrameInfo.IBufPtr);
尝试2: byte[] mydate=new byte[m_FrameInfo.IBufSize];
Marshal.Copy(m_FrameInfo.IBufPtr, mydate, 0, (int)m_FrameInfo.IBufSize);
MemoryStream ms = new MemoryStream(mydate);
Image mImage = Image.FromStream(ms);
尝试过这两个种方法都没成功。

参考技术A Byte[] Files = (Byte[])图片二进制数据;
BinaryWriter bw = new BinaryWriter(File.Open("D:\\2.rdlc",FileMode.OpenOrCreate));
参考技术B 兄弟 问题解决了嘛? 我现在也遇到这个问题了,获取到IntPtr 无法获取到整张图片 求解决方法 参考技术C 是和Com组件交互吗?如果是纯粹.net程序,就不需要这样写。追问

是普通的c++写的dll,返回的是图片的指针,现在我需要用.net调用

追答

首先得知道c++那边是怎么写的。其次,有个迂回的解决方法性能不算高但可以实现。在C++那边用把图片的二进制序列转化成base64字符串,然后.net就只需要反过来解析保证可以实现。

追问

dll是供应商提供封装好的,不是那么容易改。

追答

那也可以。你得提供官方api接口,也就是C++那边应该如何调用。

追问

我查了一下官方提供的c++的demo,和.net一样,先获取图像指针,然后将指针传给savefile方法直接把图片保存至本地了。但我这个工程需要的效率,我想直接从内存中取出来直接对图像处理。供应商那边估计也是代理,不太懂这方面的用法。

追答

什么叫直接从内存取出来?难道以前你是从文件取出来?
别怪我多嘴,尽管你可能对C++或图像处理有一定经验,但C#方面你还在入门阶段。所以先学走再学跑。

追问

以前那款相机直接返回byte数组,现在公司换了个牌子。

追答

我没接触实际的项目,不好说多的,建议你找本C#的书看看指针怎么用,还有参这个网站pinvoke.net

本回答被提问者和网友采纳

以上是关于我用C#,上一步函数返回了一个IntPtr型的图片指针,我已知图片的长、宽,如何转换成image类。的主要内容,如果未能解决你的问题,请参考以下文章

创建 COM 接口,返回一个在 C# 中编组为 IntPtr 的指针

在ASP.NET(C#)中,return的作用是啥,是退出当前过程,还是退出网页的所有程序呢。

关于通过 ref、空指针和 IntPtr 传递结构的互操作问题

C#中,已知图片内存的首地址(System.IntPtr类),想通过pictureBox显示于窗口,但提示“参数无效”

C#文本框TextBox使用问题

C#调用Win32 api时的内存操作