|
이 소스로 해보는 중인데요.
bmp 파일말고 jpg 파일은 에러가 나던데 그경우에는 어떻게 처리해야 하는지요?
소이야놀자 님이 쓰신 글 :
: 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;
|