C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[70243] Re:모니터 화면 따오기 2장....
방태윤 [nabty] 29576 읽음    2013-10-20 14:38
TBitmap 을 화면 사이즈 크기로 생성을 하시고 (TBitmap*bmp)
bmp->PixelFormat=pf24bit;

GetDC(0) 로 얻어온 hdc 로 bmp 의 Canvas 에 그려줍니다.(CreateDC를 사용해도 됩니다)
(StretchBlt 는 확대 축소용이므로 그대로 복사할때는  BitBlt 가 낫겠습니다)

얻어온 이미지의 각 픽셀은

TColor color=bmp->Canvas->Pixels[x][y];
또는
unsigned char*pixel_buffer=bmp->ScanLine[y];

로 접근해서 사용할수 있습니다.

화면에 뿌리는거는,

bmp->Canvas->Pixels[x][y]=변경된값;
또는
*(pixel_buffer+pos)=변경된값
pos 는 bmp 의 픽셀포맷 에따라 계산하는데.
24bit 인 경우라면 3 바이트 이므로
r값 pos=x*3+0;
g값 pos=x*3+1;
b값 pos=x*3+2;
(r,g,b 순서가 맞는지 모르겠네요)


으로 변경한후에

화면Canvas->Draw(0,0,bmp) 로 그리면 되겠네요,

(bmp->Canvas->Pixels[x][y] 방법은 속도가 느립니다.)


피코맨 님이 쓰신 글 :
: 수고많으십니다.
:
:
: createDC 함수를 이용해서
: 디스플레이의 현제 소스를 따온뒤에
: StretchBlt 함수를 통해서 이미지 화면에 출력까지 하는걸 완성하였습니다.
:
: 기본이 없는터라 생각보다 오래걸리네요
:
: 이후에 몇가지 질문 드려보겠습니다.
:
: 일단 제 구상은
:
: 1. 화면을 따온다.
: 2. 화면의 화소에 따라서 2차원 배열에 담는다
: 3. 배열을 적당한 수준으로 분석하고 처리한다.(영상처리)
: 4. 처리된 배열을 이용해 화면에 뿌린다.
:
: 요기까지 입니다.
:
: 3번은 알아서 조금씩 공부해가면서 해볼생각입니다.
:
: 일단 1번은 화면의 소스DC는 딸수 있겟네요.... createDC 함수를 이용해서 말이죠
: 다만 2차원 배열로 담을려면 어떻게 해야하는지.....
: 또는. 다른방법으로 바로 2차원 배열에 담을수 있는방법이 있다면 추천해주시기 바랍니다.
:
: 4번도 처리가 된 배열을 고속으로(더블버퍼링개녕)으로 처리할수있는 방법을 좀 부탁 드립니다.
:
: 스크린샷 찍고 차분이 해볼려고 하는데 아직 어렵네요...
:
: 도움 부탁 드립니다.
:
: 주말 잘 보내시기 바랍니다.
:
:

+ -

관련 글 리스트
70242 모니터 화면 따오기 2장.... 피코맨 23771 2013/10/20
70243     Re:모니터 화면 따오기 2장.... 방태윤 29576 2013/10/20
70245         Re:Re:모니터 화면 따오기 2장.... 프로그램초짜 20014 2013/10/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.