vb.net 获取内存块中的图像数据!!!!!

seaboatcn 2004-07-18 05:29:38
如果在内存的某个已知区域存放了一幅BMP图像数据,请问如何用VB.net获取并保存下来???
...全文
211 9 打赏 收藏 转发到动态 举报
写回复
用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代码吧,不知道怎么做。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧