|
PixelFormat에 대한 도움말을 참고하시기 바랍니다.
C++Builder 도움말 예제에 있는 것은 PixelFormat이 pf8bit일 때이므로 한 바이트당 한 픽셀이 되어 쉽게 처리할 수 있습니다.
하지만, 그렇지 않은 경우(예를 들어 한 픽셀 당 24비트를 차지하는 pf24bit)인 경우는 다르게 처리해야 합니다.
pf24bit인 경우, 각 픽셀에 대해 3바이트 씩인데 낮은 주소의 바이트부터 각각 Blue Green Red 값을 나타냅니다.
모르겠넹 님이 쓰신 글 :
: void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
: {
: OpenDialog1->Execute();
: String fileName;
: fileName = OpenDialog1->FileName;
: char* po;
: po = fileName.c_str();
:
: Graphics::TBitmap *gbitmap = new Graphics::TBitmap( );
: Byte *ptr;
: try
: {
: gbitmap->LoadFromFile(po);
: for (int y = 0; y < gbitmap->Height; y++)
: {
: ptr = (Byte *)gbitmap->ScanLine[y];
: for (int x = 0; x < gbitmap->Width; x++)
: ptr[x] = (Byte)y;
: }
: gbitmap->Height = this->PaintBox1->Height;
: gbitmap->Width = this->PaintBox1->Width;
: PaintBox1->Canvas->Draw(0,0,gbitmap);
:
: delete gbitmap;
:
: }
: catch(...)
: {
: ShowMessage("woops");
: }
: }
:
: 대략 이렇게 코딩해서 비트맵을 열자니 그림이 짤려서 나오네요 1/3 정도...
: 비트맵을 뿌리고자 이러는건 아니구요 일단 비트맵부터 해보려고 하는데 쉽지 않네요.
: ScanLine 을 어떻게 사용해야 제대로 사용하는걸까요??
: 도와주세요~
|