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