본문 바로가기

Projects/CoVNC

DIB를 DDB로 변환


출처 네이버 블로그 > 탑건매직
http://blog.naver.com/topgunmagic/120033732401


ReadDIB.zip

* DIB

1. 직접 비트맵을 파싱하여 처리

2.  DIB를 DDB 로 변환 (2가지)

[코드]

case WM_PAINT:
  hdc=BeginPaint(hWnd, &ps);

  // 1) loadimage를 이용한 변환  (DDB->DIB)  ----1
  hbit = (HBITMAP) LoadImage( NULL, "dragon00.bmp",
     IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );

  MemDC=CreateCompatibleDC(hdc);
  SelectObject(MemDC,hbit);

  BitBlt(hdc,0,0,96,96,MemDC,0,0,SRCCOPY);
 
 
 
  // DDB로 변환하여 그리기 ---------------------2
/* hbit=CreateDIBitmap(hdc,(BITMAPINFOHEADER *)ih,
     CBM_INIT, (PBYTE)fh+fh->bfOffBits,
     (BITMAPINFO)ih,DIB_RGB_COLORS);   

       MemDC=CreateCompatibleDC(hdc);
  SelectObject(MemDC,hbit);

  BitBlt(hdc,0,0,ih->biWidth,ih->biHeight,MemDC,0,0,SRCCOPY);
*/

  // DIB로 그리기  -----------------------------3
  if (fh) {
  SetDIBitsToDevice(hdc,0,0,bx,by,0,0,0,by,pRaster,(BITMAPINFO *)ih,DIB_RGB_COLORS);
  //StretchDIBits(hdc,0,0,bx*2,by*2,0,0,bx,by,pRaster,(BITMAPINFO *)ih,DIB_RGB_COLORS,SRCCOPY);
  }
  EndPaint(hWnd, &ps);
  return 0;



// 비트맵 파싱

BITMAPFILEHEADER *fh=NULL;
BITMAPINFOHEADER *ih;
BITMAPINFO* info;
int bx,by;
BYTE *pRaster;


// DDB 변환용
HBITMAP hbit;



void LoadDIB(char *Path)
{
HANDLE hFile;
DWORD FileSize, dwRead;

hFile=CreateFile(Path,GENERIC_READ,0,NULL,
  OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE) {
  return;
}

FileSize=GetFileSize(hFile,NULL);

if (fh)
  free(fh);


// 헤더 정보 읽기
fh=(BITMAPFILEHEADER *)malloc(FileSize);
ReadFile(hFile,fh,FileSize,&dwRead,NULL);
CloseHandle(hFile);


  // 데이타의 위치
pRaster=(PBYTE)fh+fh->bfOffBits;
// 비트맵 info header
ih=(BITMAPINFOHEADER *)((PBYTE)fh+sizeof(BITMAPFILEHEADER));


  // info
/*info->bmiHeader = ih;
info->bmiColors = (RGBQUAD)((PBYTE)fh+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER));*/



bx=ih->biWidth;
by=ih->biHeight;

  }




'Projects > CoVNC' 카테고리의 다른 글

DIB 형식 파일로 저장  (0) 2007.02.06
DIB구조  (0) 2007.02.05
BMP를 DDB로 변환  (0) 2007.02.01
비트맵 파일 저장하고 읽기  (0) 2007.02.01
CF_BITMAP 사용하기  (0) 2007.01.30