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
[39088] Re:Re:Re:주소가져오는법
방태윤 [nabty] 1904 읽음    2005-02-11 20:35
LPBITMAPINFO 가 있어서 비트맵을 여는걸로 착각하셨나봅니다.

제가 말씀드린 방법은 비트맵을 여는게 아니고 그림데이타를 화면에 출력하는 방법입니다....

scanline는 다른데서 읽어온다는게 아니라 bitmap 자신의 그림 데이터를 읽어 올수 있다는 말씀입니다.

그럼 수고하세요..

좀해보자 님이 쓰신 글 :
: 방태윤님 답변 감사합니다.
: 훗~ 상당히 어렵게 느껴지네요 ㅜ.,ㅜ;
: scanline에 대해 제가 잘못 알고 있었던거 같습니다.
: 전 scanline이 포인터 형을 가지면 쓰기가 되는줄 알고 있었거든요
: 님이 써주신 코드를 완전 이해 못하겠어요 ^^;
: 사실 비트맵 파일을 여는게 아니라 다른 파일을 여는거라 ^^;
: 제가 열고자 하는 포멧의 형식은 대강 알고 있구요
: (헤더파일이랑 대략의 정보는 빼낼수 있습니다.)
: scanline이 읽기에 사용된다면 데이터의 위치를 알고 있는 ptr[](타입 : unsigned char**)을 읽게 할수는 없나요?
: 즉, 첫번째 주소만 읽게 해서 정보를 가져오게 하는거요~
:
:
:
: 방태윤 님이 쓰신 글 :
: : 안녕하세요.? 
: :
: : ===>  scanline[0] 으로 사용할껀데 배열이 가진 첫번째 주소값을 어떻게 scanline에 넘겨 줄수 있을까요?
: :
: : 이 부분에서요 .. scanline 에 값을 넘겨줄수 없습니다.
: :
: : TBitmap 의 ScanLine[] 은  help 를 보셔도 아시겠지만 읽어올수만 있도록 되어있습니다요.
: :
: : 그러므로 Cansvas->Pixels[][] 로 화면에 출력하시면 제일간단하고요.,,근데 그렇게 하면 무지 느리니까..
: : SetDIBitsToDevice를 이용해야 할겁니다.
: :
: : LPBITMAPINFO bmpi=(LPBITMAPINFO)new byte[sizeof(BITMAPINFO)+256*sizeof(RGBQUAD)];
: :   ZeroMemory(bmpi, sizeof(BITMAPINFO));
: :   bmpi->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
: :   bmpi->bmiHeader.biPlanes=1;
: :   bmpi->bmiHeader.biWidth=엑스 싸이즈
: :   bmpi->bmiHeader.biHeight=와이 싸이즈;
: :   bmpi->bmiHeader.biBitCount=8; //8,16,24  raw 데이터가 8 비트라고 했죠?
: :   bmpi->bmiHeader.biSizeImage=bmpi->bmiHeader.biWidth*bmpi->bmiHeader.biHeight
: :                               *bmpi->bmiHeader.biBitCount/8;
: :   if(bpp==1){ //bit per pixel 이 8인경우는 팔레트가 필요합니다.
: :     bmpi->bmiHeader.biClrUsed=256;
: :     bmpi->bmiHeader.biClrImportant=256;
: :     for(int i=0;i<256;i++){
: :       PALETTEENTRY p;
: :       GetPaletteEntries(a->Palette,i,1,&p);
: :       bmpi->bmiColors[i].rgbRed = p.peRed;
: :       bmpi->bmiColors[i].rgbBlue = p.peBlue;
: :       bmpi->bmiColors[i].rgbGreen = p.peGreen;
: :       bmpi->bmiColors[i].rgbReserved = p.peFlags;
: :     }
: :   }
: :
: :   SetDIBitsToDevice(Canvas->Handle,
: :       200,200,bmpi->bmiHeader.biWidth,bmpi->bmiHeader.biHeight,
: :       0,0,0,bmpi->bmiHeader.biHeight,dest,bmpi,DIB_RGB_COLORS);
: :
: :  delete .......
: :
: :
: : 여기 dest 가 raw 데이터(헤더를 제외한 그림 데이타)를 가르키는 포인터입니다.
: : SetDIBitsToDevice,raw ,BITMAPINFO 등으로 이곳 qa 에서 검색해보시면
: : raw 데이터 화면에 출력하는 방법 더 있을겁니다.찾아보시고요...
: : 그럼.수고하세요.
: :
: :
: : 좀해보자 님이 쓰신 글 :
: : : 이미지파일을 fopen........fread........하면 메모리상에 데이터가 들어가있는 곳을 배열로 찍고 있겠죠?
: : :
: : : (fread의 프로토타입을 보면 그렇게 되어 있는거 같던데...)
: : :
: : :  그 배열(일명 : ptr[i])라고 하고 scanline을 통해서 이미지를 뿌릴려고 하는데요
: : :
: : : ptr에는 일차원으로 값을 갖고 있는것처럼 보이니까 첫번째 주소값만 scanline에 넘겨주면 되는건가요?
: : :
: : : scanline[0] 으로 사용할껀데 배열이 가진 첫번째 주소값을 어떻게 scanline에 넘겨 줄수 있을까요?
: : :
: : :
: : : 즐거운 명절 되세요~~

+ -

관련 글 리스트
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:주소가져오는법 좀해보자 1515 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.