![]() |
| |||||||
![]() |
| | LinkBack | Thread Tools | Display Modes |
| | #1 |
| Registered User Join Date: Jan 2010
Posts: 4
| ScreenShot-10 times in one second and showing it in Image component 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);
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);
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). Last edited by arva; 01-24-2010 at 08:40 AM. |
| arva is offline | |
| | #2 |
| and the hat of Jobseeking Join Date: Aug 2001 Location: The edge of the known universe
Posts: 21,630
| ScreenShot-10 times in one second and showing it in Image component - C++ You didn't read this sites code posting guidelines. Or choose carefully... How To Ask Questions The Smart Way |
| Salem is offline | |
| | #3 |
| Registered User Join Date: Jan 2010
Posts: 183
| Is this from a Direct3D game? From my experience the performance of Direct3D-GDI interactions is very poor. (Personally I find GDI performance in it self to be quite lacking) Assuming that you don't have the source code of said game; What I would do is something like Hook Direct3D9::Present or EndScene in the game Read out the back buffer and write the pixel data to a shared memory mapped file Read said pixel data from my external app and render it to a Direct3D surface. There are probably easier ways of getting pixel data from a D3D window, but this way you also get the added benefit of being able to control the target's rendering pipeline |
| _Mike is offline | |
![]() |
| Thread Tools | |
| Display Modes | |
|