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

델파이 팁&트릭
Delphi Programming Tip&Tricks
[163] 팁! 화면 컬러수 알아내기
박지훈.임프 [cbuilder] 12647 읽음    1999-06-04 00:00
임프랍니다..
오늘은 가벼운 팁으로 부담없는 하루를 시작합시다~ ^^

화면의 해상도는 TScreen형으로 전역적으로 선언된 Screen 객체로부터 알아낼수
있습니다. 간단히 Screen->Width, Screen->Height 하면 화면의 가로, 세로
픽셀수를 알아낼 수 있죠.

하지만, 화면의 컬러수는 이렇게 간단한 방법은 없구요..
api함수 GetDeviceCaps() 를 이용해서 알아내야 합니다.
이 함수는 해당 장치에 대한 아주 많은 정보를 알아낼 수 있는 아주 유용한
함수죠. 첫번째 인자로 DC를, 그리고 두번째 인자로 알아내고 싶은 정보에
해당하는 매크로를 넘겨주면 됩니다. (자세한 사항은 win32 reference를 참조..)

지금 원하는.. 화면 색상수는 간단히 다음과 같이 하면 알 수 있습니다.
GetDeviceCaps(Canvas->Handle,BITSPIXEL) * GetDeviceCaps(Canvas->Handle,PLANES)
이렇게 하면 한 픽셀당 비트수가 나오죠. 예를 들어 256컬러라면, 한 픽셀당
8비트가 됩니다. 그럼, 컬러수는?

간단합니다. 뭐, 이런거야.. 간단한 비트연산으로 끝냅시다. 만약 위 곱한 값을
BitPerPixel 이란 변수에 받았다면, 1 << BitPerPixel 라고 하면 컬러수가 됩니다.
(이해가 안되시는 분은.. 씨언어의 비트연산자를 다시 공부하시길..)

DC로서 Canvas->Handle을 넘겨준 이유는, TCanvas는 윈도우의 DC를 인캡슐레이션
하고 있는 객체이기 때문입니다. 그래서 Canvas의 핸들은 DC가 됩니다.

GetDeviceCaps() 함수를 이용하면 이 외에도 다양한 디바이스의 정보를 얻어낼 수
있는데, 한가지만 더 예를 들자면, 프린터의 가로/세로 dpi도 이 함수를 이용해서
알아낼 수 있습니다. 현재 선택된 프린터의 DC는 Printer()->Handle로부터
얻을 수 있고, 따라서 프린터의 가로, 세로 dpi는 다음과 같이 구할수 있습니다.

GetDeviceCaps(Printer()->Handle, LOGPIXELSX)   // 가로 dpi
GetDeviceCaps(Printer()->Handle, LOGPIXELSY)   // 세로 dpi


무척 간단하죠? ^^
프린터로 어떤 그림을 그릴때, 화면상에 나오는 크기와 동일하게 찍으려면
반드시 위와같은 프린터의 dpi와 화면의 dpi(일반적으로 96이죠)의 비율을  
알아서 그만큼 보정을 해주어야 합니다.

그럼 도움되시길...



독립문에서 임펠리테리였습니다.

+ -

관련 글 리스트
163 팁! 화면 컬러수 알아내기 박지훈.임프 12647 1999/06/04
(링크)     C++Builder Tip'N Tricks > 팁! 화면 컬러수 알아내기
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.