|
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에 넘겨 줄수 있을까요?
: : :
: : :
: : : 즐거운 명절 되세요~~
|