int nWidth=GetSystemMetrics(SM_CXSCREEN); int nHeight=GetSystemMetrics(SM_CYSCREEN); for(int i=0;i<nWidth;i++) { for(int j=0;j<nHeight;j++) { HDC hDC = ::GetDC(NULL); //获取屏幕DC //2、 获取当前鼠标位置像素值 CPoint pt; ptx=nWidth; pty=nHeight; COLORREF clr = ::GetPixel(hDC, ptx, pty); if() //你要做的判断 { } } }
TextOut(hdc,0,0,cxchar,20);
cxchar是一个int变量,不能当做字符串直接输出的,必须转换成字符串。
char ccx[20];
itoa(cxchar,ccx,10);
TextOut(hdc,0,0,ccx,strlen(ccx));
如果是使用GDI其实内核就是一个基础缩放API, StretchBlt()/StretchDIBits() GDI+的话,可以直接Draw()。
具体实现上,这要看你的应用的窗体类型。
1、DIALOG 对话框:
处理WM_CTLCOLORDLG,消息事件,先检查对话框的窗口尺寸,然后依据该尺寸创建一个兼容位图,将原图直接StretchBlt() 缩放到对话框大小,然后将这个兼容位图转换成位图画刷并返回就可以了。
2、普通的WINDOWS 窗体。
处理WM_PAINT消息。 计算窗体尺寸,然后直接使用这个API 进行缩放。 中间可以使用双缓冲,避免屏幕闪烁。
CreateDC,(CreatePrinterDC内部也是调用的它)。
CreateDC(_T("WINSPOOL"),name, NULL, data);
打印机一般用 WINSPOOL, name可以通过EnumDisplayDevices 来得到打印设备名称。data可以看MSDN上的说明来设置,也就是打印DPI,纸张宽度高度,颜色等信息,没什么难的,开始你设置为NULL试试
GetPixel(HDC,
int,
int);
是用于获取指定设备上的某一点象素的RGB颜色
HDC用于表示设备
两个int表示该点的位置坐标
查看原帖>>
CImage c;
CImage c1;
cLoad(L"e:\\heheJPG");
c1Create(……);//创建你需要的尺寸,nBPP = 24
HDC hDC = c1GetDC();
SetStrechBltMode(hDC,COLORONCOLOR);
cStrechBlt(hDC,……);//随便画吧,愿意画哪部分画哪部分
c1ReleaseDC();//这里不能少,否则会有断言错误
在MFC中,View视图类窗口的大小有两个,一个是可视窗口大小,一个是逻辑窗口大小。
在没有滚动条的情况下,两个大小相同,使用GetClientRect就可以获取大小:
CRect rt;GetClientRect(&rt);
需要注意的是,CScrollView这个视图类,在有滚动条的情况下,通过上述代码获取的是可视窗口大小,而不是完整窗口尺寸,完整窗口尺寸需要通过GetTotalSize函数获取:
CSize logicSize = GetTotalSize();// logical size既然用了GDI+就好办。
1VOID Example_GetPixel(HDC hdc)
{
Graphics graphics(hdc);
// Create a Bitmap object from a file
Bitmap myBitmap(L"Climberbmp");
// Get the value of a pixel from myBitmap
Color pixelColor;
myBitmapGetPixel(25, 25, &pixelColor);
int blue = pixelColorGetBlue();
}
2处理位图,三步走,先Bitmap::LockBits (),在改像素,再UnlockBits。
给个例子:
VOID Example_LockBits2(HDC hdc)
{
Graphics graphics(hdc);
UINT pixels;
// 从文件创建位图
Bitmap bitmap(L"LockBitsTest2bmp");
// 显示位图
graphicsDrawImage(&bitmap, 10, 10);
// 锁定位图中一块50x30的区域
BitmapData bitmapData;
Rect rect(20, 10, 50, 30);
bitmapLockBits(
&rect,
ImageLockModeWrite,
PixelFormat32bppARGB,
&bitmapData);
// 写入有LOckbits提供的缓冲区
pixels = (UINT)bitmapDataScan0;
for(UINT row = 0; row < 30; ++row)
{
for(UINT col = 0; col < 50; ++col)
{
pixels[row bitmapDataStride / 4 + col] = 0xff00ff00;
}
}
// 提交更改,解锁位图
bitmapUnlockBits(&bitmapData);
//显示修改后的位图
graphicsDrawImage(&bitmap, 150, 10);
}
你要在控件显示,就先获取控件的hdc,这个不要我说了吧。
以上就是关于VC++/MFC如何提取屏幕上每一点的RGB值并判断全部的内容,包括:VC++/MFC如何提取屏幕上每一点的RGB值并判断、vc++宽窄字符问题、vc中如何让背景图片随窗体的大小变化而改变 mfc等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)