Q&A

  • GDI로 그림그릴때 색상에 대해.....
음..오랜만에 들려서 질문만 남기고 가는군요...쩝...



요새 새로운 고민이 하나 생겼는데요....



윈도우에서는 PEN, BRUSH등의 색상을 지정할 때, COLORREF 형을 쓰죠...



저 COLORREF에서 지정된 R, G, B 값으로 그림을 그리는데......



하이칼라일 경우는 문제가 없지만, 256이하의 값을 가지는 비트맵일경우



다음과 같은 상황은 어떻게 해결하죠????



1. DC에 256이하의 칼라 Depth를 가진 비트맵을 만들어서 SelectObject합니다.



2. 이 때 위의 비트맵은 칼라테이블을 가지게 되는데, 칼라 테이블 중에서



같은 RGB값을 가지는 엔트리가 두개 이상 존재하는 비트맵입니다.



(예를 들어, 0번 인덱스와 1번 인덱스의 RGB값이 0x123456으로 같다고 하면....)



3. GDI의 각종 함수(Line, Ellipse, Rectangle 등)를 이용하여 그림을 그리는데



서로 다른 Color Index를 지정할려고 하면 어떻게 하죠????



즉, COLORREF의 RGB값은 같은데(0x123456), 실제로 Bitmap의 내용은 서로 다른



Color-Table의 Index(0과 1)를 가리키게 할려고 하는 경웁니다.



이게 가능한가요???? (단 DIB를 써서 모든 함수(선, 원, 사각형 그리기)를



직접 만들어서 한다.....는 제외하고. -.-;)



..

..



질문내용이 제대로 전달되었는지 모르겠군요...쩝.



그럼 이만.





1  COMMENTS
  • Profile
    안영기 2001.01.11 03:30


    256 bitmap 일 때는 Indexed color 와 RGB color 를 둘 다 사용할 수 있습니다.



    예를들어 COLORREF 의 값이 $00FF0000 이면 빨간색일텐데.

    이것은 RGB color 의 기준으로 $xxRRGGBB 로 각 bits 를 지정한 것이죠..



    그렇다면.. Indexed color 를 쓰는 법은 ?



    color = ( $01000000 or Index );



    로 사용하시면 됩니다..

    이렇게 되면 이 color 값은 palette 를 가지는 모드에서는

    팔레트의 인덱스 값이 됩니다..



    윈도우 컬러에서는 32bit 의 COLORREF 중에서 상위 8 bits 를

    다양한 용도로 쓰고 있습니다...



    그중에 상위 8-bit 를 $01 로 세팅 했을 때가 팔레트 인덱스이고

    $80 으로 세팅하면 윈도우 배경의 기본 컬러 ( 버튼색, 윈도우 색등.. )

    가 되는 식입니다..



    더 자세한 것은 직접 해보시면 알 수 있습니다.





    김상희 wrote:

    > 음..오랜만에 들려서 질문만 남기고 가는군요...쩝...

    >

    > 요새 새로운 고민이 하나 생겼는데요....

    >

    > 윈도우에서는 PEN, BRUSH등의 색상을 지정할 때, COLORREF 형을 쓰죠...

    >

    > 저 COLORREF에서 지정된 R, G, B 값으로 그림을 그리는데......

    >

    > 하이칼라일 경우는 문제가 없지만, 256이하의 값을 가지는 비트맵일경우

    >

    > 다음과 같은 상황은 어떻게 해결하죠????

    >

    > 1. DC에 256이하의 칼라 Depth를 가진 비트맵을 만들어서 SelectObject합니다.

    >

    > 2. 이 때 위의 비트맵은 칼라테이블을 가지게 되는데, 칼라 테이블 중에서

    >

    > 같은 RGB값을 가지는 엔트리가 두개 이상 존재하는 비트맵입니다.

    >

    > (예를 들어, 0번 인덱스와 1번 인덱스의 RGB값이 0x123456으로 같다고 하면....)

    >

    > 3. GDI의 각종 함수(Line, Ellipse, Rectangle 등)를 이용하여 그림을 그리는데

    >

    > 서로 다른 Color Index를 지정할려고 하면 어떻게 하죠????

    >

    > 즉, COLORREF의 RGB값은 같은데(0x123456), 실제로 Bitmap의 내용은 서로 다른

    >

    > Color-Table의 Index(0과 1)를 가리키게 할려고 하는 경웁니다.

    >

    > 이게 가능한가요???? (단 DIB를 써서 모든 함수(선, 원, 사각형 그리기)를

    >

    > 직접 만들어서 한다.....는 제외하고. -.-;)

    >

    > ..

    > ..

    >

    > 질문내용이 제대로 전달되었는지 모르겠군요...쩝.

    >

    > 그럼 이만.

    >

    >