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