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
[22800] [급질문] BITMAP 많이 다뤄보신분! RGBQUAD를 만들려고 합니다.
서비 [suby] 2526 읽음    2002-11-23 10:57
현재 Bitmap의 rowdata만 가지고
하나의 BITMAP을 만들려고 합니다.

그 중 BITMAPINFO 구조체를 만드는 과정에서
BITMAPINFOHEADER는 만들었지만
RGBQUAD에 Color수에 따라 배열을 생성하고
ColorTable을 만들어주어야 합니다.

24Bit이상에서는 이 ColorTable을 만들지 않아도 되지만,
2, 16, 256 Color는 ColorTable을 직접 만들어야 합니다.

제가 기존에 Bitmap Handle을 받아서 처리 한 루틴입니다.

    if(nColorData != 0){ // nColorData는 Color수
        RGBQUAD* rgb = new RGBQUAD[nColorData];

        CClientDC dc(NULL);
        CDC memdc;

        memdc.CreateCompatibleDC(&dc);
        memdc.SelectObject(hBitmap);

        for(int i = 0; i < GetDIBColorTable(memdc, 0, nColorData, rgb); i++){
            pBmi->bmiColors[i].rgbRed        = rgb[i].rgbRed;
            pBmi->bmiColors[i].rgbGreen        = rgb[i].rgbGreen;
            pBmi->bmiColors[i].rgbBlue        = rgb[i].rgbBlue;
            pBmi->bmiColors[i].rgbReserved    = rgb[i].rgbReserved;       
        }

        delete[] rgb;
        rgb = NULL;
    }
DC의 컬러 정보를 가져와 알아서 ColorTable을 생성 시켜주어 편리했죠
하지만 DC가 없는 상황에서 ColorTable을 만들려니까
이노무 머리가 딸려서 알고리즘이 안되네요..

16 Color의 경우 Shift연산과 비트 연산이 들어가야하는데
노가다(?)로 컬러 정보를 입력하는건 너무 후퇴된 방법이고

2, 16, 256 Color Table을 생성하는 코드를 알고 계신분은 공유좀 해주시겠습니까?

예를 든다면 이런식으로죠

GetColorTable(nColorData, rgb)

+ -

관련 글 리스트
22800 [급질문] BITMAP 많이 다뤄보신분! RGBQUAD를 만들려고 합니다. 서비 2526 2002/11/23
39229     Re:[급질문] BITMAP 많이 다뤄보신분! RGBQUAD를 만들려고 합니다. @ㅏ^ㅏ달 2091 2005/02/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.