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