双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

如何得到并输出屏幕某一矩形区域所有点的RGB值

lonky6545646 lonky6545646 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include<Windows.h>
#include<iostream>
using namespace std;
//使用多字节字符集:项目>最后一项>配置属性>常规 里设置
void getrgb(LPRECT lpRect)
{
HDC hScrDC,hMemDC; //声明屏幕和内在设备描述表

HBITMAP hBitmap,hOldBitmap; //新老位图句柄

int nX,nY,nX2,nY2; //选定区域坐标

int nWidth,nHeight; //位图宽度和高度

int xScrn,yScrn; //屏幕分辨率

//if(IsRectEmpty(lpRect)) //确保选定区域不为空矩形
// return NULL;

hScrDC=CreateDC("DISPLAY",NULL,NULL,NULL); //为屏幕创建设备描述表

hMemDC=CreateCompatibleDC(hScrDC);
//为屏幕设备描述表创建兼容的内存设备描述表

nX=lpRect->left; //获得选定区域坐标
nY=lpRect->top;
nX2=lpRect->right;
nY2=lpRect->bottom;

xScrn=GetDeviceCaps(hScrDC,HORZRES); //获得屏幕分辨率
yScrn=GetDeviceCaps(hScrDC,VERTRES);

if(nX<0) nX=0; //确保选定区域是可见的
if(nY<0) nY=0;
if(nX2>xScrn) nX2=xScrn;
if(nY2>yScrn) nY2=yScrn;

nWidth=nX2-nX; //获得位图的宽度和高度
nHeight=nY2-nY;

hBitmap=CreateCompatibleBitmap(hScrDC,nWidth,nHeight);
//创建一个与屏幕设备描述表兼容的位图

hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBitmap);
// 把新位图选到内存设备描述表中

BitBlt(hMemDC,0,0,nWidth,nHeight,hScrDC,nX,nY,SRCCOPY);
// 把屏幕设备描述表拷贝到内存设备描述表中

hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
//得到屏幕位图的句柄


RGBQUAD rgb[3];

GetDIBColorTable(hMemDC,0,3,rgb);

for(int i=0;i<3;i++)
{
cout<<rgb[i].rgbRed<<","<<rgb[i].rgbGreen<<","<<rgb[i].rgbBlue<<endl;
}

DeleteDC(hScrDC); //清除

DeleteDC(hMemDC);
}

int main()
{
LPRECT lpRect=new RECT() ; //注意实体类型变量初始化
lpRect->left=301;
lpRect->top=217;
lpRect->right=12*20+301;
lpRect->bottom=2*16+217;

getrgb(lpRect);

system("pause");
return 0;
}

如何得到并输出屏幕某一矩形区域所有点的RGB值 ?
上面的代码哪里出错了?
可令去掉某些代码么?
谢谢
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
lonky6545646
C++ 语言 65,214 成员 250,514 内容