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
[56415] Re:이미지를 메모리에 담는것에 관한 질문입니다.
소이야놀자 [] 1819 읽음    2009-03-12 20:08
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;

+ -

관련 글 리스트
56413 이미지를 메모리에 담는것에 관한 질문입니다. 초보 1307 2009/03/12
56415     Re:이미지를 메모리에 담는것에 관한 질문입니다. 소이야놀자 1819 2009/03/12
56425         한가지 더 질문 드립니다. 초보 1287 2009/03/13
56426             JPG파일 읽을때입니다 소이야놀자 1457 2009/03/13
56420         Re:Re:이미지를 메모리에 담는것에 관한 질문입니다. 초보 1842 2009/03/13
56414     Re:이미지를 메모리에 담는것에 관한 질문입니다. 둘리.CSIEDA 1342 2009/03/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.