Ok, I'm trying to make a program that finds the position of a colored pixel within the desktop. To do this I make a screenshot of the desktop then go through the pixels and search for the one that has the matching RGB as i need. The only problem is that my program returs strange coordonates X,Y for the found pixel...
#include <stdio.h>
#include <windows.h>
#include <atlimage.h>
#include <iostream>
using namespace std;
struct rgbcolor{
int red;
int green;
int blue;} myColor;
struct point{
int x;
int y;
};
point SearchPixel(int r,int g, int b){
CImage bitmapzor;
bitmapzor.Load(("C:\\1.bmp"));
COLORREF PixColor=0; //This is a color data
int R=0,G=0,B=0; //These are the channel values
BYTE* byteptr = (BYTE*)bitmapzor.GetBits();
int ok=0;
int pitch = bitmapzor.GetPitch(); //This is a pointer offset to get new line of the bitmap
//Go through every pixel and compare the RGB code
for (int i=0; i<bitmapzor.GetWidth();i++)
for (int j=0; j<bitmapzor.GetHeight();j++)
{
B= *(byteptr+pitch*j+3*i);
G= *(byteptr+pitch*j+3*i+1);
R= *(byteptr+pitch*j+3*i+2);
if(R==r&&G==g&&B==b)
{ point p;
p.x=i;
p.y=j;
cout<<"First pixel found at:\n X:"<<p.x<<"\n Y:"<<p.y<<"\n-----------------\n";
return p;
}
}
bitmapzor.Destroy(); //destroy the bitmap
point p;
p.x=-1;
p.y=-1;
cout<<"Pixel not found!\n";
return p;
}
bool ScreenCapture(int x, int y, int width, int height, char *filename){
// get a DC compat. w/ the screen
HDC hDc = CreateCompatibleDC(0);
// make a bmp in memory to store the capture in
HBITMAP hBmp = CreateCompatibleBitmap(GetDC(0), width, height);
// join em up
SelectObject(hDc, hBmp);
// copy from the screen to my bitmap
BitBlt(hDc, 0, 0, width, height, GetDC(0), x, y, SRCCOPY);
CImage image;
image.Attach(hBmp);
image.Save(("C:\\1.bmp"), Gdiplus::ImageFormatBMP);
SearchPixel(myColor.red,myColor.green,myColor.blue);
// free the bitmap memory
DeleteObject(hBmp);
return 1;
}
int main()
{ //RGB for the searched color
myColor.red=200;
myColor.green=191;
myColor.blue=231;
int count=0;
while(true){
ScreenCapture(0, 0, 1366, 768, "c:\\1.bmp");
count++;
cout<<"Number of searches:"<<count<<"\n\n";
Sleep(500);
}
system("pause");
return 0;
}