안녕하세요 메르세데스입니다.


이번시간에는 델파이를 이용하여 화면캡처 프로그램을 만드는 방법을 알아보려고 합니다.


구글링을 잘 하시면 필요한 방법에 대해 많은 정보를 얻으실 수 있는데요..   


찾으신 기능들을 좀 조합하신다면 훌륭한 프로그램을 만들 수 있지 않을까 생각합니다. 




제가 원하는것은.. 이것입니다.


*원하는 모니터에 있는 화면을 캡처해서 자동으로 클립보드에 복사한다.



나중에 마우스로 선택한 영역을 이라는 조건을 더 추가하면 더할나위 없을텐데..     일단 시간이 없는 관계로 이렇게만 해보려고합니다.   조금만 응용하시면 어렵지 않으실거에요..  윈도우의 캡처도구처럼말이죠..



구글의 도움을 조금 받았고요..   모니터 선택하는 부분과 클립보드쪽은 제가 조금 수정해봤습니다.



일단..  CaptureScreen(ABitmap:TBitmap) 이라는 프로시저를 아래와 같이 만들었습니다. 


uses ...   Jpeg, Clipbrd   <--추가..  



uses절 추가


이 프로시저가 해당모니터를 스크린샷하고 결과물을 TBitmap형태로 반환한다고 보면되겠죠..  픽셀포멧을 변경할 수 있습니다. 찾아보니 최대 32bit까지네요..


화면 screenshot 부분



이 버튼에서는 ..위에서 만들었던 것을 이용해서  파일로 저장과 클립보드로 복사해 넣는 것을 구현했습니다.


Clipboard를 사용하기 위해선 uses절에 꼭 추가해 주셔야합니다.


파일저장 및 클립보드복사


테스트를 했더니 C드라이브아래에 AAAA.PNG라는 이름으로 파일이 생성되었습니다.  사실저건.. PNG파일이 아니라 JPEG파일이죠..  TJpegImage를 이용하였습니다. 결과물의 확장자가 잘못되어도 열 수 있는 파일이라 미리보기에 보인 것입니다.


또한 결과물을 생성할때 위의 옵션에서 퀄리티를 조절할 수 있습니다. 




출력 결과물


모니터의 넘버링을 edit로 받아서 좌/우 모니터를 캡처하였더니 만족스러운 결과가 나왔습니다.   클립보드에  들어왔기 때문에 richtext type의 에디터에 붙여주시면 들어옵니다.  워드나 한글.. 같은거요..



clipboard 결과


제가 다루지 않았던 생소한 영역이긴 하지만.. 물론 구글의 도움을 받았지만.. 코딩 몇줄이면  제법 괜찮은 결과를 얻이실 수 있을 것입니다.


마우스의 선택영역만  캡처하는 걸 개발하려면.. 


CaptureScreen procedure의 아래부분의 처리를 Mouse좌표로 변경하고.. 쉽진 않겠지만..클릭이나 드래그가 안되도록 손을 보면 가능 할 것 같다는 생각이 듭니다.


ABitmap.Height := Screen.Monitors[i].Height;

ABitmap.Width  := Screen.Monitors[i].Width;


BitBlt(ABitmap.Canvas.Handle, 0, 0, ABitmap.Width, ABitmap.Height, vDesktopDC, Screen.Monitors[i].Left, Screen.Monitors[i].Top, SRCCOPY);







블로그 이미지

delphi개발자 메르세데쓰

C#,delphi,db,network,server,it 개발자 메르세데스입니다

Tag

댓글을 달아 주세요