如何得到并输出屏幕某一矩形区域所有点的RGB值
#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值 ?
上面的代码哪里出错了?
可令去掉某些代码么?
谢谢
#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值 ?
上面的代码哪里出错了?
可令去掉某些代码么?
谢谢
...全文
相关推荐
《计算机图形学》1-4章习题解答.doc
《计算机图形学》1-4章习题解答
cubemx配置正点原子LTDC RGB屏
找了很久都没有cubmx来配置原子RGB屏幕的,于是自己写一个, 我的分辨率是7寸1024x600 使用RGB屏幕前提是配置好SDRAM,因为需要缓冲区是建立在SDRAM上面, 如何配置请看我这个文章https://blog.csdn.net/a2267542848/article/details/110944197 如果是其他RGB分辨率,需要改的地方有 1 时序 2 宏定义 分辨率 3 LCD时钟 硬件接口 一定要注意引脚对应,不然会点不亮屏幕 cubmex配置 1 打开DMA2D
屏幕取点工具v1.5实战应用指南
通过配置文件(如。
VC将屏幕区域保存为图片
VC将屏幕区域保存为图片,该代码为网上搜集整理。int CDlldemoDlg::SaveBitmapToFile(HBITMAP hBitmap, LPSTR lpFileName) //hBitmap 为刚才的屏幕位图句柄 { //lpFileName 为位图文件名 WORD wBitCount; //位图中每个像素
提取区域内RGB均值
选取矩形区域,对该区域的R、G、B进行提取,得到该区域内RGB均值,可用于矿物识别上面



