Hey, 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. For now it is refreshing in 2,5-3 seconds:/ Maybe better solution would be DirectX or something else?

Image1->Picture->LoadFromFile("black.bmp");
         Image1->Refresh();
         HWND Wnd=FindWindow(NULL,"Window");
         if(Wnd==0) {MessageBox(0,"Didnt find the window",0,0);}
         HDC ekran=GetDC(Wnd);
         for(int i=0; i<116; i++)
         {
           for(int j=0; j<114; j++)
           {
               screen[i][j]=GetPixel(ekran, 674+i,11+j);   //colorref
               Image1->Picture->Bitmap->Canvas->Pixels[i][j]=screen[i][j];
           }
         }

Edited 6 Years Ago by arva: n/a

Now I have something like this. It 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.

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:

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);

Edited 6 Years Ago by arva: n/a

This article has been dead for over six months. Start a new discussion instead.