社区
VB
帖子详情
vb.net 获取内存块中的图像数据!!!!!
seaboatcn
2004-07-18 05:29:38
如果在内存的某个已知区域存放了一幅BMP图像数据,请问如何用VB.net获取并保存下来???
...全文
211
9
打赏
收藏
vb.net 获取内存块中的图像数据!!!!!
如果在内存的某个已知区域存放了一幅BMP图像数据,请问如何用VB.net获取并保存下来???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
seaboatcn
2004-09-09
打赏
举报
回复
还是不行
水如烟
2004-07-18
打赏
举报
回复
请教在VB.NET或C#下怎样取得一个对象在内存中的大小和地址?
http://community.csdn.net/Expert/topic/3117/3117219.xml?temp=.6377832
水如烟
2004-07-18
打赏
举报
回复
刚才去逛了一下,发现,这个问题好复杂
别说内存了,就说图象的存储结构也得摸清楚哪
AntingZ
2004-07-18
打赏
举报
回复
记得是这样:
unsafe代码是非托管代码的一种,在C#和VC.NET可以使用
在VB.NET没办法实现
水如烟
2004-07-18
打赏
举报
回复
原来这就是unsafe.(楼主别怨我乱贴)
http://www3.ccw.com.cn/club/essence/200211/12316.htm
.NET疑难解答系列专题(1)——麦地解答
我的确很忙,但如果你的问题在我的领域之下,又不是牵扯到很specific的编程细节(比如哪个类哪个函数怎么用,这些问题一般查找SDK Document即可解决)或者你具体的开发项目、环境设置等,我都会尽力回答。如果还有一些深度,我就更乐意了,:)
你这个问题问的很好,也很有水平,确实如你所讲GetBytes返回的是new出来的byte array对象,这是显然的,作为公共类库的设计,要返回一个引用类型的数组,必须new一个和原来的数据脱离关系,否则彼处的修改很容易把此处的数据搞崩溃。Microsoft在这个问题上没有太大的毛病。
处于效率的考虑,我们当然需要自己定制化的做法,很明显C#中的unsafe就是为此而设计的——实际上类似于图象处理等这种大规模数据操作的情况,大多数的时候都要用到unsafe上下文。我在附件中Unsafe_B2S.cs就是为此而设计,你看一下源文件就明白了。(注意编译的时候要用unsafe switch,即csc /unsafe Unsafe_B2S.cs)
上面的解法大多数时候已经够用了,但unsafe上下文遇到CLR毕竟有一种信任安全的问题,而且可以看到其中的指针操作需要非常小心才对。那么有没有不用unsafe的解决方法呢?实际上附件中Better_B2S.cs就是我想出来的一个方法。它利用了.NET中提供给struct和class这样的类型的内存布局的能力(关于[StructLayout(LayoutKind.Explicit)]和[FieldOffset(0)]这些attributes的用法,你可参看.NET SDK Doc)。它的基本思想和C/C++中的union类似,使不同的字段占用同样的内存位置——这样就把区分字节的任务交给了计算机。
你可以在Better_B2S.cs中看到,这种方案适用于class和struct,而前面unsafe 的方法只适用于struct这样的值类型。使用这种struct layout唯一需要注意的地方就是其中的ByteData字段一定要在其他字段初始化之前进行初始化——你可以用任何值初始化ByteData,因为它们会被后面的字段初始化“冲”掉。由于class中的字段允许声明的同时初始化,所以你可以看到class的实现看起来比struct的漂亮一些。
总体而言struct layout的实现方案要好一点,第1消除了unsafe上下文;第2实现灵活,不必拘泥于全是byte(byte,int等混杂的情况都可以,这种情况unsafe指针就不方便);第3,封装性好,组件化程度高,可用性很高。唯一的缺陷是如果你的struct(class)中的字段所占字节非常多,struct(class)写起来就很难看,但它的所占内存总量并不会多——这是因为微软没有提供值类型的数组,如果有就会显得很perfect。
lay993132001
2004-07-18
打赏
举报
回复
我也來頂一下。我不是太理解的。呵。。
tendotnet
2004-07-18
打赏
举报
回复
带星的同志们辛苦了!(也帮了小弟不少忙啊)
水如烟
2004-07-18
打赏
举报
回复
怎么定位内存地址我都不知道,更别说你这个问题了
学习。
楼上,什么是unsafe,我也懒了,懒得去查
athossmth
2004-07-18
打赏
举报
回复
关注,这要unsafe代码吧,不知道怎么做。
asp.net知识库
实现C#和
VB.net
之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象
中
的私有变量 关于反射
中
创建类型实例的两种方法 ASP...
DICOM3DSDK.rar
主要功能包括: 网络通讯: 支持标准的DICOM协议,实现了验证、存储、查询、转移、工作列表等功能,可以方便的设置和
获取
网络通信
中
的
数据
元素信息,以便对
数据
库进 行操作。 影像处理: 常用:窗宽窗位、定位线、...
用
VB.NET
开发交互式CAD系统
用
VB.NET
开发交互式CAD系统,包括结合GDI+和OPENGL两种方案。 联系平台客服可开发票。
Biokey SDK 3.8 标准版 + 驱动程序
Biokey SDK 3.8(Software Development Kit)主要以ActiveX的方式存在,使用者可以使用各种开发语言(例如VC++, C++Builder, Delphi, VB, Visual Foxpro, PB,C#,
VB.net
等)来开发相对于指纹仪的应用程序。
vc++ 应用源码包_1
代码里用了备份dll的方法,因此在自定义的函数
中
可以直接调用在
内存
中
备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...
VB
16,554
社区成员
110,527
社区内容
发帖
与我相关
我的任务
VB
VB技术相关讨论,主要为经典vb,即VB6.0
复制链接
扫一扫
分享
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章