如何获取vb控件image图片的DC,imahdc = GetDC(Image1.Picture.Handle) 可以么

如何获取vb控件image图片的DC,imahdc = GetDC(Image1.Picture.Handle) 可以么,第1张

框和图像框都是有hdc属性的,如果要显示的话,应该先设置autoredrew为真,然后用refresh方法刷新显示。相关的API函数应该不用我说了吧什么BITBLT什么的。我的意思是你想用GetDc方法获得图像框的DC的想法是画蛇添足,因为图像框自己就已经有hdc属性了,就跟他的caption属性是一样的,直接写image1hdc就可以获得图像框的Dc

不是很清楚你是实现什么功能,一般来说,用CreateDIBSection即可,调用成功后就可以直接往缓冲区写数据了

==================

哦哦~~~大概GetDIBits就是你需要的了(这个还不够方便)~~有HBITMAP句柄的话就可以直接GetBitmapBits返回它的数据了

==================

直接处理的话……不太清楚,貌似没有?

只剩下GetBitmapBits了~~不过它一样需要一个外界的空间来存放数据,修改好后用SetBitmapBits写进去

==================

你试试用GetObject行不行~

HBITMAP hBmp;

BITMAP bmp;

GetObject(hBmp, sizeof(BITMAP), (LPSTR)&bmp);

我没空测试……偶尔看到这个结构罢了

typedef struct tagBITMAP {

LONG bmType;

LONG bmWidth;

LONG bmHeight;

LONG bmWidthBytes;

WORD bmPlanes;

WORD bmBitsPixel;

LPVOID bmBits;

} BITMAP, PBITMAP;

hdc不是NULL的话,你看看是不是INVALID_HANDLE_VALUE;另外你MFC是win98格式的话,也许会存在现在的系统不兼容的问题。这个我只是猜的,因为我碰到过类似的情况,我在XP下编译生成的debug程序,在CreateFile调用后本来正常, 在win7下就INVALID_HANDLE_VALUE,只有在win7下把生成的exe以XP兼容模式运行才能成功一点提示,希望能帮到你

主要在于你获得的HDC是哪个。

首先你要获取你要截图窗口的HWND

通过GetWindowDC 或 GetDC 获取相应的 HDC

得到HBITMAP,其实你给出的程序已经完成了这步,只不过他用的HDC是屏幕的。

也就是说,你要在你的程序里想办法获得你要截图的窗口的HDC。

然后你程序里的 hSrcDC这个变量赋上这个要截图的HDC。

而窗口HDC可以通过第二步里的GetWindowDC 或 GetDC 获得,

调用这个函数需要窗口句柄,也就是窗口的HWND。

你这程序里

HWND hw = getHandle(1);

这一句想办法让 getHandle函数返回要截图窗口的HWND。

直接 GetDC 获得 HDC 进行绘制的话,会被覆盖(擦)掉。

正确的方法是在 WM_PAINT 消息处理函数里调用 BeginPaint 获得 HDC,绘制完成后调用 EndPaint。

原理很简单,只需要简要的三步。既:获取屏幕DC、得到当前鼠标所在的像素值、分解出像素值中的红、绿、蓝三色既可,很简单吧!

关键代码实现:

1、获取屏幕DC

HDC hDC = ::GetDC(NULL); //获取屏幕DC

2、获取当前鼠标位置像素值

CPoint pt;

GetCursorPos(&pt); //得到当前鼠标所在位置

COLORREF clr = ::GetPixel(hDC, ptx, pty); //获取当前鼠标点像素值

3、分解出像素点中的红、绿、蓝颜色值

CString ClrText;

ClrTextFormat("%d",GetRValue(clr)); //分解出红色值

ClrTextFormat("%d",GetGValue(clr)); //分解出绿色值

ClrTextFormat("%d",GetBValue(clr)); //分解出蓝色值

::ReleaseDC(NULL, hDC); //释放屏幕DC

以上就是关于如何获取vb控件image图片的DC,imahdc = GetDC(Image1.Picture.Handle) 可以么全部的内容,包括:如何获取vb控件image图片的DC,imahdc = GetDC(Image1.Picture.Handle) 可以么、高分 请高人解答 通过 hdc 获取 DIB 对象的数据指针、打印机句柄获取等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/web/9350906.html

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

发表评论

登录后才能评论

评论列表(0条)

保存