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

C++빌더 FAQ
C++Builder Programming FAQ
[5] [TECHNIQUE][WIN32 API] 현재 화면 컬러수 얻기
박지훈.임프 [cbuilder] 15410 읽음    2000-06-12 00:00
/Q//
현재 시스템 사양이 16비트 이상인지 알아내려고 합니다.


/A//
윈도우 시스템에서 사용가능한 총 컬러수를 알아내려면 API함수 GetDeviceCaps()를
사용하면 되구요, 이 함수의 프로토타입은 다음과 같습니다.

int GetDeviceCaps(HDC hdc, int nIndex);

첫 인자로 dc를 하나 넘겨주구요, 두번째 인자로서는 알아내려는 정보에 따라 여러
지 인덱스를 넘겨줍니다. 원하시는 것처럼 시스템 컬러수를 알아내려면 먼저 플레인
의 수를 알아내고, 다음에 픽셀당 비트수를 알아내서 곱해준후, 1을 왼쪽으로 그 수
만큼 시프트 해주면 됩니다. 코딩은,

(컬러수) = 1 << (GetDeviceCaps(dc, PLANES) * GetDeviceCaps(dc, BITSPIXEL));

와 같습니다. 단지 몇비트 컬러인지만 알고 싶다면 시프트 할 필요도 없이

GetDeviceCaps(dc, PLANES) * GetDeviceCaps(dc, BITSPIXEL);

해주면 16비트 컬러라면 16이 리턴되고, 256 컬러라면 8이 리턴됩니다.
그럼, 도움되시길 바라구요, 이만...

(참... 물론 dc는 GetDC()등의 함수로 미리 구해둬야 겠죠~ 아무거나 상관없구요,
현재 폼의 핸들로부터 dc를 구하거나 Canvas->Handle로 구하면 젤 쉽겠네요~)


/A//
API함수 중에 EnumDisplaySettings()라는 함수가 있습니다. 이것은 디스플레이

장치의 그래픽 모드들의 정보를 얻어오는 함수입니다.

도움말에서 함수의 원형을 보면 다음과 같습니다.

  BOOL EnumDisplaySettings(

    LPCTSTR lpszDeviceName,  // specifies the display device
    DWORD iModeNum,          // specifies the graphics mode
    LPDEVMODE lpDevMode      // points to structure to receive settings
   );

각 인자의 자세한 설명은 도움말을 보시고요.
다음 예제를 보세요.

  procedure TForm1.Button1Click(Sender: TObject);
  var
      DMode: TDevMode;
      ModeNumber: Integer;
  begin
      ModeNumber := 0;
      while EnumDisplaySettings(nil, ModeNumber, DMode) do
      begin
         if (Screen.Width = DMode.dmPelsWidth) then
            ShowMessage(IntToStr(DMode.dmBitsPerPel)+' 비트컬러 사용 가능');
         Inc(ModeNumber);
      end;
  end;

이 예제는 EnumDisplaySettings()를 이용해서 현재 시스템에서 사용할 수 있는

모든 해상도의 모든 컬러를 얻어옵니다. (While문에서...)
그리고 현재 해상도에서 가능한 컬러수를 ShowMessage()로 출력합니다.

실행해 보시면 이해가 가실겁니다. 응용하시면 될 것 같군요.

+ -

관련 글 리스트
5 [TECHNIQUE][WIN32 API] 현재 화면 컬러수 얻기 박지훈.임프 15410 2000/06/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.