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
[39128] Re:Re:Re:Re:주소가져오는법
좀해보자 [] 1514 읽음    2005-02-16 15:41
파일형식에 대한 명세는 없지만 이미지파일은 올려드리겠습니다.

님이 쓰신 글 :
: bool KPGM::Load(char* szFile) 메서드 내의 아래 코드를 보니 1 픽셀  당 1 바이트이군요.
:  //read data
:     for(int i=0; i<nRow; i++)
:         fread(_ppA[i],1,nCol,fp);
: 그렇다면,
: void __fastcall TForm1::SpeedButton1Click(TObject *Sender) 내의 gbitmap의 PixelFormat를 pf8bit로 명시적으로 지정해주셔야 합니다.
:
: 제가 PGM, PPM 확장자를 가진 이미지 파일에 대해 아는 바가 없어서 더이상 말씀드릴 수가 없군요.
: 혹 해당 파일형식에 대한 명세를 가지고 계시면 이미지 파일과 함께 여기에 올려보세요.
: 제가 한 번 살펴보겠습니다.
:
: 좀해보자 님이 쓰신 글 :
: : 이미지 처리에 대한 공부를 하고 있어서요 ^^;
: : PGM, PPM 확장자를 가진 이미지를 공부하고 있습니다.
: : 이 이미지를 열려고 뷰어를 만들고 있습니다.
: :
: : void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
: : {
: :  OpenDialog1->Execute();
: :  String fileName;
: :  fileName = OpenDialog1->FileName;
: :  char* po;
: :  po = fileName.c_str();
: : try
: :  {
: :  KPGM pgm;
: :  pgm.Load(po);
: :
: :                 //for image draw
: :  Graphics::TBitmap*gbitmap = new Graphics::TBitmap();
: :   TMemoryStream* pms = new TMemoryStream();
: :   pms->Read(&pgm._ppA[0],pgm.Size());
: :
: :   gbitmap->LoadFromStream(pms);
: :   gbitmap->Height = pgm.Row();
: :   gbitmap->Width = pgm.Col();
: :
: :   gbitmap->ScanLine[0];  
: :   PaintBox1->Canvas->Draw(0,0,gbitmap);
: :
: :   delete gbitmap;
: :
: : }
: :
: : catch(...)
: : {
: :  ShowMessage("Woops");
: : }
: :
: : }
: :  //---------------------------------------------------------------------------
: : bool KPGM::Load(char* szFile) //tag: gm
: : {
: :     FILE *fp;
: :     int  dummy;
: :     char buf[10];
: :
: :     //create a file pointer
: :     if((fp=fopen(szFile,"rb")) == 0)
: :         return false;
: :     //read its ID
: :     fscanf(fp,"%s",buf);
: :     if((buf[0]!='P')|| buf[1]!='5') {
: :         fclose(fp);
: :         return false;
: :     }
: :     fgetc(fp);
: :     //skip comment lines if exists
: :     while((dummy=fgetc(fp)) == '#')
: :         while(fgetc(fp) != '\n');
: :     ungetc(dummy,fp);
: :     //read dimensions
: :     int nCol,nRow;
: :     fscanf(fp,"%d%d%d",&nCol,&nRow,&dummy);
: :     fgetc(fp);
: :     // memory alloc.
: :  KImageGray::Create(nRow,nCol);
: :     //read data
: :     for(int i=0; i<nRow; i++)
: :         fread(_ppA[i],1,nCol,fp);
: :    fclose(fp);
: :
: :    return true;
: : }
: :
: : 대략 이런 이런 코드를 작성했죠
: : 그런데 구동이 되질 않는군요 ㅡ.,ㅡ;
: : 그냥 하얀색이미지만 뿌려지는것을 보니 데이터를 넘겨받지 못하는거 같습니다.
: : 데이터가 들어가있는 메모리를 _ppA가 알고 있구요
: : _ppA(unsigned cahe**))의 첫번째 주소만 넘겨주면 scanline[0] 이 첫번째 열을 읽어들여서 화면에 뿌려야 하는데
: : 제 아이디어가 잘못된건가요?
: : _ppA의 타입이 TBitmap에서는 읽기가 좀 그래서 스트림으로 받아들여 넘겨주려고 합니다. ^^;
: : 접근방법이 잘못된것일지도 모르구요
: : 도와주세요~~
: :
: :
: : : 굳이 이미지 파일 포맷에 대해 구체적으로 공부하고 싶다면 모를까 이미지 파일에 대해 fopen,fread 등을 사용하여 Raw Data를 다룰 일은 없습니다.
: : :
: : : 특별히 그렇게 만들지 않는 이상 이미지 파일은 단순한 픽셀 정보만 플랫하게 들어가 있는 것이 아닙니다.
: : : 다시말해 님이 말씀하신 것과 같은 이미지 파일은 표준이 아닙니다.
: : : 이미지 파일에는 선두에 헤더가 있습니다.
: : : 헤더 형식은 이미지 파일의 형식에 따라 다를 수 있구요.
: : : 한편 이미지 파일의 픽셀 정보는 픽셀 정보를 그대로 저장하지 않는다고 보면 됩니다.
: : : 일예로, JPEG 형식은 압축하여 저장합니다.
: : : 결국, 이미지 파일에 대해 조작을 가하려면 해당 이미지 형식에 맞는 컴포넌트를 사용하시는 게 좋습니다.
: : : Bitmap 형식은 Graphics::TBitmap, JPEG 형식은 TJPEGImage ...

+ -

관련 글 리스트
39076 주소가져오는법 좀해보자 1722 2005/02/07
39083     Re:주소가져오는법 방태윤 1711 2005/02/11
39086         Re:Re:주소가져오는법 좀해보자 1562 2005/02/11
39088             Re:Re:Re:주소가져오는법 방태윤 1904 2005/02/11
39077     Re:주소가져오는법 1842 2005/02/08
39080         Re:Re:주소가져오는법 좀해보자 1930 2005/02/10
39081             Re:Re:Re:주소가져오는법 1592 2005/02/10
39128                 Re:Re:Re:Re:주소가져오는법 좀해보자 1514 2005/02/16
39082                 Re:Re:Re:Re:주소가져오는법 좀해보자 1516 2005/02/11
39161                     Re:Re:Re:Re:Re:주소가져오는법 1782 2005/02/18
39091                     Re:Re:Re:Re:Re:주소가져오는법 1660 2005/02/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.