HBITMAP ์์ BMP ํ์ผ๋ก ์ถ์ถ ¶
~cpp
//*********************************************************************
// CImageTool::ExportAsBMP()
// Purpose: [CBitmap์ ์ ์ฅ๋์ด์๋ ์ด๋ฏธ์ง๋ฅผ Bmpํ์ผ๋ก ๋ง๋ ๋ค.]
// Parameters:
// [type] : 1 ํฝ์
๋น Bit ์
// [*filename] : ๋ง๋ค์ด์ง bmpํ์ผ์ด๋ฆ
// [*pDC] : Device Context
// [hBitmap] : ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋์ด ์๋ CBitmap (HBITMAP์ผ๋ก ๋ณํํ์ฌ ์ฌ์ฉ)
// [nWidth] : ์ด๋ฏธ์ง์ ๋์ด
// [nHeight] : ์ด๋ฏธ์ง์ ๋์ด
// Returns: BOOL
//*********************************************************************
BOOL CImageTool::ExportAsBMP(int type, char *filename, CDC *pDC,
HBITMAP hBitmap, int nWidth, int nHeight)
{
BYTE *bmp;
BITMAPFILEHEADER header;
FILE *fp;
unsigned int size, palsize;
BOOL r = FALSE;
if ((bmp=GetBMP(type, nWidth, nHeight, hBitmap, pDC->m_hDC,
&size)) == NULL)
return FALSE;
if (type != 3) palsize = 1<<bit[type];
else palsize = 0;
header.bfType = 0x4D42;
header.bfSize = size+sizeof(BITMAPFILEHEADER);
header.bfReserved1 = header.bfReserved2=0;
header.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+
sizeof(RGBQUAD)*palsize;
if ((fp=fopen(filename,"wb")) == NULL)
{
free(bmp);
return FALSE;
}
if (fwrite(&header,sizeof(BITMAPFILEHEADER),1,fp)!=0)
if (fwrite(bmp,size,1,fp)!=0) r=TRUE;
free(bmp);
fclose(fp);
return r;
}
//*******************************************************************
// *CImageTool::GetBMP()
// Purpose: [์ฃผ์ด์ง HBITMAP์์ ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ์ฝ์ด ์ค๋ ํจ์]
// Parameters:
// [type] : 1ํฝ์
๋น Bit์
// [w] : ์ด๋ฏธ์ง ๋์ด
// [h] : ์ด๋ฏธ์ง ๋์ด
// [hBitmap] : ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋์ด์๋ CBtimap
// [hdc] : Device Context
// [*size] : File Size (๋ฐํ๋๋ ๊ฐ)
// Returns: BYTE
//*******************************************************************
BYTE *CImageTool::GetBMP(int type, int w, int h, HBITMAP hBitmap,
HDC hdc, unsigned int *size)
{
LPBITMAPINFO lpvBits;
BYTE *lpbi;
int width,palsize;
if (type!=3) palsize = 1<<bit[type];
else palsize = 0;
width = ((((w*bit[type]+7)/8+3)/4)*4);
*size = sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*palsize+width*h;
lpvBits = (BITMAPINFO *)malloc(*size);
lpbi = (BYTE *)lpvBits+sizeof(BITMAPINFOHEADER) +
sizeof(RGBQUAD)*palsize;
lpvBits->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
lpvBits->bmiHeader.biWidth = w;
lpvBits->bmiHeader.biHeight = h;
lpvBits->bmiHeader.biPlanes = 1;
lpvBits->bmiHeader.biBitCount = bit[type];
lpvBits->bmiHeader.biCompression = BI_RGB;
lpvBits->bmiHeader.biSizeImage = width*h;
lpvBits->bmiHeader.biXPelsPerMeter = 0;
lpvBits->bmiHeader.biYPelsPerMeter = 0;
lpvBits->bmiHeader.biClrUsed = 1<<bit[type];
lpvBits->bmiHeader.biClrImportant = 1<<bit[type];
GetDIBits(hdc,hBitmap,0,h,lpbi,lpvBits,DIB_RGB_COLORS);
return (BYTE *)lpvBits;
}
์ถ์ฒ:GOSU.NET
thread ¶
๋์๋๊ธฐ๋ค๋ณด๋ฉด ์ธ๋งํ ์์ค๋ค์ด ๋์ณ๋๋๊ตฐ.. -_-; ๋ ์กฐ๋ฆฝ๋ง ํ๋ฉด๋๋ค. ใ
ใ
ใ
- eternalbleu










