U E D R , A S I H C RSS

MFC/HBitmap ToBMP

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
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:42
Processing time 0.0079 sec