vb 如何获取一个对象的地内存地址比如有一个Picturebox里面的图象,我想获取图象的内存地址和大小

vb 如何获取一个对象的地内存地址比如有一个Picturebox里面的图象,我想获取图象的内存地址和大小,第1张

对于对象:ObjPtr(对象名) 可以获得这个对象储存在内存中数据的地址

但是这个地址对于框来说一定不等于其内容的地址 因为是这个对象的一个属性

一般框是DDB(Device Dependent Bitmap,相对于DIB,设备无关位图)的位图,数据被系统封装,因此你只能 *** 作其DC(Device Context 设备上下文)或 *** 作被选入DC的位图:

使用系统提供的语句完成图像的处理(例如位图复制等),不能直接去修改内存实现位图数据的修改。

例如,

可以用GetBitmapBits,SetBitmapBits等函数来读取或修改位图的数据

可以用BitBlt函数来复制一个DC内容到另一个DC上

DC与位图区别在于DC是一个绘图的环境,DC更高层一点,而位图则是纯粹的数据

如果想直接通过修改内存(例如创建了一个数组,储存图像),请先建立一个DIB位图,然后SelectObject选入DC。

创建DIB可以用CreateDIBSection函数,这个函数可以从指定内存创建DIB位图,或者分配一个内存并返回其地址

(得到数据储存的地址以后就可以在vb中修改SafeArray结构来很容易地通过访问数组来访问该块内存)

注意:picturebox的DC是picturehdc,而不能用GetDC(picturehwnd),因为在AutoRedraw=True的时候这样会出问题。

在MouseUp事件中获取参数e的坐标,根据坐标判断是否属于其他的picturebox的范围

遍历界面上的所有picturebox(如果是层叠的picturebox,从最上层往最下层开始遍历),获取他的左上角坐标(Location)和宽度(Width),高度(Height),从而确定该Picturebox所占的位置,判断鼠标坐标是否处于此位置即可判断属于哪一个Picturebox

病情分析:

你好咳嗽是人体清除呼吸道内的分泌物或异物的保护性呼吸反射动作。虽然有其有利的一面,但剧烈长期咳嗽可导致呼吸道出血。

指导意见:

你好小孩还是采用食疗生姜红糖大蒜孩子患了风寒感冒,喝温热的生姜红糖水能起到很好的治疗作用,如果孩子同时还伴有咳嗽,可在生姜红糖水里再加2~3瓣大蒜一起煮,要用小火煮10分钟,把蒜头的辣味煮掉,这样孩子才肯喝。

病情分析:

您好,主要原因估计还是身体抵抗力下降,建议注意饮食营养,尽量不要吃辛辣的食物。

指导意见:

一般情况下,感冒可在1~2周内自愈。至今尚无特效药物能快速治疗感冒,只能帮您减轻症状等,除了服用白加黑等常用抗感冒药物外,建议也可以食疗治疗感冒,如可以多喝一些鸡汤、可乐加生姜片加热后饮用、另外绿叶蔬菜含有较多的维生素C,对感冒病毒有一定抑制作用。

病情分析:

您好,小孩经常感冒是因为免疫力低下导致的

指导意见:

一般来说补充一些免疫球蛋白就可以的,以后就不会这么容易感冒,至于咳嗽的话可以吃点中成药。

病情分析:

您好,宝宝的咳嗽最主要的还是要找寻原因的,如果您家的宝宝的这个感冒咳嗽不断的话还是要建议您一是给宝宝查找有无过敏性的因素,二是要看看有无支原体感染等的情况。

指导意见:

因此您最好是要上正规医院进行诊疗的,不同的原因治疗方法完全不同的,咳嗽的治疗无外乎是对症治疗以及对因治疗二部分的。

病情分析:

你这个是典型的小孩子免疫力低下引起的反复感冒。

指导意见:

你这个我建议可以让孩子喝枇杷膏,效果很好而且是中药成分。然后记得让孩子每天晚上睡觉之前泡热水脚,泡二十分钟。以后就不会那么经常的感冒了。

病情分析:

如果总是咳嗽我个人认为应该是有炎症。

指导意见:

中药川贝炖雪梨对孩子的恢复也有很好的帮助,平时注意多给孩子喝水,一定要注意保暖,避免着凉引起感冒

病情分析:

你好,你说的这种情况考虑是抵抗力差引起的,不要担心。

指导意见:

你好,像你说的这种情况我建议你等孩子病好后给孩子吃点蛋白粉和合生元就可以的,多带孩子锻炼身体,长大点会好的,祝你生活愉快。

无解~~

ImageFromFile() 是先读取文件,然后把读取的2进制数据生成Image,所以不可逆。

但是你可以通过别的方法实现啊,

定义个string FileName = @"…………";

然后ImageFromFile(FileName)啊;

如果是函数之间调用,你大可不必传Image对象,传fileName就行了啊。

线程一暂停程序就像假死一样,很别扭,还是弄个timer控件吧

添加一个timer控件,有个interval属性,是设置多少秒执行一次的,比如说你要1秒将picturebox移动一次,那么就把interval设成1000(这个单位是毫秒,所以1000

=

1秒),然后用timer的tick事件timer也就这么一个事件,把你用来移动picturebox的代码放在timer的tick时间里面,就会1秒执行1次,然后在别的地方把timer控件的enabled设成true,也就是启动

在 Paint事件里自己画

这个你参考一下

using System;

using SystemDrawing;

using SystemWindowsForms;

public class Program

{

private static void Main()

{

ApplicationRun(new MainForm());

}

}

public class MainForm : Form

{

public MainForm()

{

PictureBox pic = new PictureBox();

Image img = ImageFromFile("imagepng"); // 加载图像

Point pti = PointEmpty, pts = PointEmpty;

bool dow = false;

picBorderStyle = BorderStyleFixedSingle;

picDock = DockStyleFill;

picParent = this;

picMouseDown += delegate(object o, MouseEventArgs e)

{

Rectangle rec = new Rectangle(pti, imgSize);

if (!recContains(eLocation)) return;

ptsX = eX - ptiX;

ptsY = eY - ptiY;

dow = true;

};

picMouseMove += delegate(object o, MouseEventArgs e)

{

Rectangle rec = new Rectangle(pti, imgSize);

if (!dow) return;

ptiX = (eX - ptsX);

ptiY = (eY - ptsY);

picRefresh();

};

picMouseUp += delegate(object o, MouseEventArgs e)

{

dow = false;

};

picPaint += delegate(object o, PaintEventArgs e)

{

eGraphicsDrawImage(img, new Rectangle(pti, imgSize));

};

ClientSize = new Size(256, 256);

}

}

以上就是关于vb 如何获取一个对象的地内存地址比如有一个Picturebox里面的图象,我想获取图象的内存地址和大小全部的内容,包括:vb 如何获取一个对象的地内存地址比如有一个Picturebox里面的图象,我想获取图象的内存地址和大小、C#如何判断鼠标位置是否处于一个picturebox内、求大神指点vb.net 的PictureBox1_MouseMove 能获取到鼠标在PictureBox1的坐标位置吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10188815.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存