|
1) 이미지 읽어서 화면에 뿌릴때
// 이미지 읽을때
Graphics::TBitmap * pOpenBmp = new Graphics::TBitmap(); // 이거 나중에 delete해야 함.
pOpenBmp->LoadFromFile(FileName);
// TImage에 뿌릴때
TRect ImgRect = TRect(0, 0, pOpenBmp->Width, pOpenBmp->Height);
Image1->Canvas->StretchDraw(ImgArea, pOpenBmp);
// 이미지 읽어서 버퍼에 담을때
int ImgW = pOpenBmp->Width;
int ImgH = pOpenBmp->Height;
int ImgBand = 3; // 24비트 칼라이미지면 3, 8bit 흑백 이미지면 1
unsigned char *pImgBuff = new unsigned char[ImgW*ImgH*ImgBand];
for(int iy=0; iy<ImgH; iy++)
{
Byte *ptr = (Byte *)pOpenBmp->ScanLine[iy];
for (int ix = 0; ix<ImgW*m_ImgBand; ix++)
{
m_pImgBuff[iy*m_ImgBand*m_ImgW+ix] = ptr[ix];
}
}
// 위에서 읽은 이미지가 24비트 칼라 이미지일 경우 아래의 과정이 필요하겠죠 8비트 이미지면 필요없습니다.
int iR, iB, iG;
unsigned char *pBuffR = new unsigned char[ImgW*ImgH];
unsigned char *pBuffG = new unsigned char[ImgW*ImgH];
unsigned char *pBuffB = new unsigned char[ImgW*ImgH];
for(int iy=0; iy<ImgH; iy++)
{
for(int ix=0; ix<ImgW; ix++)
{
iB = m_pImgBuff[(iy*ImgW+ix)*ImgBand+0];
iG = m_pImgBuff[(iy*ImgW+ix)*ImgBand+1];
iR = m_pImgBuff[(iy*ImgW+ix)*ImgBand+2];
pBuffB[iy*ImgW+ix] = iB;
pBuffG[iy*ImgW+ix] = iG;
pBuffR[iy*ImgW+ix] = iR;
}
}
// 다시 Image2에다 뿌릴때 쉬운방법입니다
// 다른 방법은 CreateDIBSection() 을 사용해 비트맵 만들어서 StretchDIBits() 로 뿌리는 방법이 있습니다.
int i,j;
byte *ptr;
Graphics::TBitmap * pTmpBmp = new Graphics::TBitmap();
pTmpBmp->Width=ImgW;
pTmpBmp->Height=ImgH;
for(j=0; j<ImgH; j++)
{
ptr = (Byte *)pTmpBmp->ScanLine[j];
for(i=0; i<ImgW; i++)
ptr[i]= pImgBuff[j*ImgW+i];
}
TRect ImgRect = TRect(0, 0, ImgW, ImgH);
Image2->Canvas->StretchDraw(ImgArea, pTmpBmp);
delete pTmpBmp;
|