|
방태윤님 답변 감사합니다.
훗~ 상당히 어렵게 느껴지네요 ㅜ.,ㅜ;
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에 넘겨 줄수 있을까요?
: :
: :
: : 즐거운 명절 되세요~~
|