2011-11-19 5 views
2

사과드립니다. 나는 C를 처음 접했고 나는 정말로 내가하는 일을 모른다.HBITMAP 표시

Windows 7 및 C를 사용하여 스크린 샷을 캡처하고 표시하려고합니다. 나는 그것이 바보 같이 들린다는 것을 안다. 결국 나는 각기 다른 프로그램에서이 기능들을 필요로 할 것이다. 화면을 캡쳐하는 것은 이미지를 디스플레이하는 것으로 보내지 만, 현재는 둘 모두를 하나의 프로그램에서 작동 시키려고한다. . 지금까지 작성한 코드는 다음과 같습니다.

 #include <windows.h> 

bool ScreenCapture(int x, int y, int width, int height){ 
// 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); 

HDC myhDc = GetDC(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap); 

BitBlt(myhDc, 0, 0, width, height, hDc, x, y, SRCCOPY); 

//Display bitmap 
DrawBitmap(myhDC,0,0,hBmp,SRCCOPY); 

//GetDC(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap); 

// free the bitmap memory 
DeleteObject(hBmp); 

return 0; 
} 

int main(){ 
ScreenCapture(500, 200, 300, 300); 
system("pause"); 
} 

HBITMAP을 표시 할 수있는 방법을 찾지 못했습니다. HBITMAP을 어떻게 표시합니까?

업데이트 : 나는 DrawBitmap을 추가하지만, 나는 다음과 같은 출력을 받고 그것을 처리하는 방법을 잘 생각하고 ... 작동하지 않습니다 :

'win_screenshot.exe'로드 'C : \ 사용자 \ mbrooker \ Documents \ Visual Studio 2010 \ Projects \ win_screenshot \ Debug \ win_screenshot.exe '기호가로드되었습니다. 'win_screenshot.exe'로드 : 'C : \ Windows \ SysWOW64 \ ntdll.dll'로드 됨, PDB 파일을 찾거나 열 수 없음 'win_screenshot.exe': 'C : \ Windows \ SysWOW64 \ kernel32.dll'로드 됨, Can not PDB 파일을 찾거나 열 수 없습니다. 'win_screenshot.exe'로드 : 'C : \ Windows \ SysWOW64 \ KernelBase.dll'로드 됨. PDB 파일을 찾을 수 없거나 열 수 없음 'win_screenshot.exe':로드 됨 'C : \ Windows \ SysWOW64 \ gdi32.dll' : \ Windows \ SysWOW64 \ lpk.dll ', PDB 파일을 찾거나 열 수 없습니다. 'win_screenshot.exe ':'C : \ Windows \ SysWOW64 \ usp10.dll '로드 됨, PDB 파일을 찾거나 열 수 없음 'win_screenshot. exe ':로드 된'C : \ Windows \ SysWOW64 \ msvcrt.dll ', Can not fi PDB 파일을 찾을 수 없거나 열 수 없음 'win_screenshot.exe':로드 됨 'C : \ Windows \ SysWOW64 \ PDB 파일을 찾을 수 없거나 열 수 없음 'win_screenshot.exe':로드 됨 'C : \ Windows \ SysWOW64 \ rpcrt4.dll' : \ Windows \ SysWOW64 \ sspicli.dll ', PDB 파일을 찾거나 열 수 없음 'win_screenshot.exe ':'C : \ Windows \ SysWOW64 \ cryptbase.dll '로드 됨, PDB 파일을 찾거나 열 수 없음 'win_screenshot. exe ':로드 된'C : \ Windows \ SysWOW64 \ msvcr100d.dll ', 심볼로드 됨. 'win_screenshot.exe'로드 : 'C : \ Windows \ SysWOW64 \ imm32.dll'로드 됨, PDB 파일을 찾거나 열 수 없음 'win_screenshot.exe': 'C : \ Windows \ SysWOW64 \ msctf.dll'로드 됨, Can not PDB 파일을 찾거나 열지 않습니다. 'win_screenshot.exe': 'C : \ Windows \ SysWOW64 \ apphelp.dll'로드 됨, PDB 파일을 찾거나 열 수 없음 'win_screenshot.exe':로드 됨 'ImageAtBase0x4ab60000'/설정을 제외합니다. 'win_screenshot.exe': 언로드 'ImageAtBase0x4ab60000' '[1480] win_screenshot.exe : Native'프로그램이 코드 0 (0x0)으로 종료되었습니다.

+1

콘솔 모드 응용 프로그램에서 비트 맵을 표시 할 수 없습니다. –

답변

1

HBITMAP을 표시하는 것은 BitBlt을 통해 다른 DC으로 블리딩하는 것입니다. 이미 수행중인 것과 유사한 방식으로, 예를 들어 윈도우의 DC와 같은 다른 DC로만 이동하려면 GetDC을 참조하십시오.

MSDN은 Scaling an Image (DrawBitmap 기능 참조) 샘플 코드를 제공합니다.

+0

감사합니다. DrawBitmap 함수를 추가했는데 작동하지 않는 것 같습니다. 위의 업데이트 된 코드를 참조하십시오. 다시 BitBlt를 사용해야합니까?처음 비트를 올바른 크기의 사각형으로 옮겨야하지 않습니까? 어쩌면 나는 BitBlt가하고있는 일을 정확하게 이해하지 못한다. 아니면 DrawBitmap을 사용하지 않고 기능에서 사용한 것과 동일한 방법을 사용하고 싶습니까? –

+1

코드가 컴파일되지 않습니다. 그리고 DC가 새어 나옵니다. Petzold 또는 Richter와 같은 GDI 프로그래밍에 대한 책을 얻으시기 바랍니다. –

관련 문제