|
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Graphics::TBitmap*a=new Graphics::TBitmap();
a->LoadFromFile("c:\\kk779.bmp");
for(int j=0;j<a->Height;j++){
unsigned char*p=(unsigned char*)a->ScanLine[j];
for(int i=0;i<a->Width;i++){
Canvas->Pixels[i][j]=RGB( *(p+i*3+2),*(p+i*3+1),*(p+i*3+0) );
}
}
delete a;
}
위의 예는 bmp를 불러와서 각 픽셀의 rgb 값으로 화면에 뿌리는 예제입니다.
주위할 사항은 위의 예제는 비트맵이 24bit 일 경우에 해당합니다....
즉 *(p+i*3+2),*(p+i*3+1),*(p+i*3+0) 3의 byte가 r,g,b 를 담당하고 있는거지요.
만약 비트맵이 16 bit라면
unsigned short*p=(unsigned short*)a->ScanLine[j];
형태로 불러와서 short 형의 p 를 1:5:5:5 인가?(정확지 않음) 형태로 비트를
분리해야 rgb 를 얻을수 있습니다.
다른 bit 에대해서도 마찬가지로 그에 맞는 작업을 해주어야 합니다.
구리구리 님이 쓰신 글 :
: 비트맵 인포헤더안에 비트맵 파일헤더, RGBQUAD가 있고 제일 뒤에
: 실제 비트맵 데이터가 있다고 하는데
: 이 데이터를 어떻게 가져다 꺼야하죠
: 검은색 배경위에 캐릭터가 있다고하면 마우스로 영역을 지정하면 캐릭터를 제외한 나머지 영역까지 크게 짤려서 픽셀을 하나하나 비교를 해서 캐릭터가 들어가는 최소한의 사각형으로 줄여서 짤라내려고 하거든요
:
: 실제 비트의 색을 어떻게 비교해야 하는지 만이라도 알려주세요
|