Hi, I have a big problem. I want to do a program which will get a part of the screen of a program. After that It will show this small rectangle in Image component in BCB. But the problem is, it has to refresh it at least 10 times in one second. For now I succeeded in doing a code that gets a screen but it is too slow. It is refreshing in 2,5-3 seconds(It is copying all pixels separately by GetPixel() function to Image):/ This code below is within a loop. It should show the window but it shows only black screen. When I'm using analogical code but with loading a bitmap from file everthing works fine.
1.
Code:
HDC WinDC;
HDC CopyDC;
HBITMAP hBitmap;
RECT rt;
HWND Wnd=FindWindow(NULL,"WINDOW");
if(Wnd==0) {MessageBox(0,"didnt found the window!",0,0);}
GetWindowRect (Wnd, &rt);
WinDC = GetDC (Wnd);
CopyDC = CreateCompatibleDC (global_hdc);
std::cout<<rt.right - rt.left<<std::endl;
std::cout<<rt.bottom - rt.top<<std::endl;
hBitmap = CreateCompatibleBitmap (WinDC,
800, //width
600);//height
SelectObject (CopyDC, hBitmap);
BitBlt (global_hdc, //destination
0,0,
800, //width
600, //height
CopyDC, //source
0, 0,
SRCCOPY);
DeleteObject((HBITMAP)hBitmap);
DeleteDC(CopyDC);
2.Analogical code with loading from file:
Code:
HBITMAP image;
BITMAP bm;
HDC hdcMem;
//load the bitmap image
image = (HBITMAP)LoadImage(0,"asteroid.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
//read the bitmap's properties
GetObject(image, sizeof(BITMAP), &bm);
//create a device context for the bitmap
hdcMem = CreateCompatibleDC(global_hdc);
SelectObject(hdcMem, image);
//draw the bitmap to the window (bit block transfer)
BitBlt(
global_hdc, //destination device context
0, 0, //x,y location on destination
bm.bmWidth, bm.bmHeight, //width,height of source bitmap
hdcMem, //source bitmap device context
0, 0, //start x,y on source bitmap
SRCCOPY); //blit method
//delete the device context and bitmap
DeleteDC(hdcMem);
DeleteObject((HBITMAP)image);
EDIT:
I want to get a part of window in a game and want to show this rectangle on my form. I've chosen Image component(BCB) for that but I'm not sure that it is enough fast way. I've got known that the problem is that I don't load the bitmap(of the black screen). So I have to load about 10 or more pictures per second from DC of this game window, am I right? But I don't have any idea how to load it from window and put in the image component(I think Image component don't have HDC so I can't use BitBlt function?).
I would be also grateful for orienting me how to analize pixels as fastly as possible. I mean I want analize about 50000 pixels four times in one second(checking if their color is red).