Save image from picturebox use MFC
-
hi guys,,, i'm a newbie in MFC so i'm need your advice to complete final project about identification signature. in this time i have problem about how to save image from picture box in MFC. this is my code used in MFC. this code not save image from picturebox. what's wrong with my code??? void SaveBitmapToFile( BYTE* pBitmapBits, LONG lWidth, LONG lHeight,WORD wBitsPerPixel, LPCTSTR lpszFileName ); void CSaveimageDlg::OnSave() { // TODO: Add your control notification handler code here CDC *pDC = m_pic1.GetDC(); CDC dcMem1; CRect rect; m_pic1.GetClientRect(rect); HDC hdc; HBITMAP hBitmap = NULL; BITMAP bm; CBitmap Bitmap; m_pic1.SetBitmap(Bitmap); Bitmap.CreateBitmap(200 ,200,1,24,NULL); m_bmpBitmap.GetBitmap(&bm); //Bitmap.GetBitmap(&bm); Bitmap.GetObject( sizeof( BITMAP ), &bm ); unsigned char *pData = new unsigned char [bm.bmHeight*bm.bmWidthBytes]; SaveBitmapToFile(pData,bm.bmHeight,bm.bmWidth,24,(LPCTSTR)_T("a.bmp")); delete []pData; } void CSaveimageDlg::SaveBitmapToFile(BYTE *pBitmapBits, LONG lWidth, LONG lHeight, WORD wBitsPerPixel, LPCTSTR lpszFileName) { BITMAPINFOHEADER bmpInfoHeader = {0}; bmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER); bmpInfoHeader.biBitCount = wBitsPerPixel; bmpInfoHeader.biClrImportant = 0; bmpInfoHeader.biClrUsed = 0; bmpInfoHeader.biCompression = BI_RGB; bmpInfoHeader.biHeight = lHeight; bmpInfoHeader.biWidth = lWidth; bmpInfoHeader.biPlanes = 1; bmpInfoHeader.biSizeImage = lWidth* lHeight * (wBitsPerPixel/8); BITMAPFILEHEADER bfh = {0}; bfh.bfType=0x4D42; bfh.bfType = 'B'+('M' << 8); bfh.bfOffBits = sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER); bfh.bfSize = bfh.bfOffBits + bmpInfoHeader.biSizeImage; HANDLE hFile = CreateFile( lpszFileName,GENERIC_WRITE, 0,NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL); if( !hFile ) // return if error opening file { return; } DWORD dwWritten = 0; WriteFile( hFile, &bfh, sizeof(bfh), &dwWritten , NULL ); WriteFile( hFile, &bmpInfoHeader, sizeof(bmpInfoHeader), &dwWritten, NULL ); WriteFile( hFile, pBitmapBits, bmpInfoHeader.biSizeImage, &dwWritten, NULL ); CloseHandle( hFile ); }
-
hi guys,,, i'm a newbie in MFC so i'm need your advice to complete final project about identification signature. in this time i have problem about how to save image from picture box in MFC. this is my code used in MFC. this code not save image from picturebox. what's wrong with my code??? void SaveBitmapToFile( BYTE* pBitmapBits, LONG lWidth, LONG lHeight,WORD wBitsPerPixel, LPCTSTR lpszFileName ); void CSaveimageDlg::OnSave() { // TODO: Add your control notification handler code here CDC *pDC = m_pic1.GetDC(); CDC dcMem1; CRect rect; m_pic1.GetClientRect(rect); HDC hdc; HBITMAP hBitmap = NULL; BITMAP bm; CBitmap Bitmap; m_pic1.SetBitmap(Bitmap); Bitmap.CreateBitmap(200 ,200,1,24,NULL); m_bmpBitmap.GetBitmap(&bm); //Bitmap.GetBitmap(&bm); Bitmap.GetObject( sizeof( BITMAP ), &bm ); unsigned char *pData = new unsigned char [bm.bmHeight*bm.bmWidthBytes]; SaveBitmapToFile(pData,bm.bmHeight,bm.bmWidth,24,(LPCTSTR)_T("a.bmp")); delete []pData; } void CSaveimageDlg::SaveBitmapToFile(BYTE *pBitmapBits, LONG lWidth, LONG lHeight, WORD wBitsPerPixel, LPCTSTR lpszFileName) { BITMAPINFOHEADER bmpInfoHeader = {0}; bmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER); bmpInfoHeader.biBitCount = wBitsPerPixel; bmpInfoHeader.biClrImportant = 0; bmpInfoHeader.biClrUsed = 0; bmpInfoHeader.biCompression = BI_RGB; bmpInfoHeader.biHeight = lHeight; bmpInfoHeader.biWidth = lWidth; bmpInfoHeader.biPlanes = 1; bmpInfoHeader.biSizeImage = lWidth* lHeight * (wBitsPerPixel/8); BITMAPFILEHEADER bfh = {0}; bfh.bfType=0x4D42; bfh.bfType = 'B'+('M' << 8); bfh.bfOffBits = sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER); bfh.bfSize = bfh.bfOffBits + bmpInfoHeader.biSizeImage; HANDLE hFile = CreateFile( lpszFileName,GENERIC_WRITE, 0,NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL); if( !hFile ) // return if error opening file { return; } DWORD dwWritten = 0; WriteFile( hFile, &bfh, sizeof(bfh), &dwWritten , NULL ); WriteFile( hFile, &bmpInfoHeader, sizeof(bmpInfoHeader), &dwWritten, NULL ); WriteFile( hFile, pBitmapBits, bmpInfoHeader.biSizeImage, &dwWritten, NULL ); CloseHandle( hFile ); }
-
1.) width != byte_width! byte_width == (width*(bitsperpixel/8)+3)&~3 (4byte boundary) 2.) call GetBitmapBits to get the bitmap content before save. have a nice day.
Hello Try this. http://www.ucancode.net/Visual\_C\_Codes/MFC-Example-CreateFile-WriteFile-save-memory-dc-bitmap-file.htm instead of memdc, you can call your picture box dc. Thanks A. Gopinath.
-
Hello Try this. http://www.ucancode.net/Visual\_C\_Codes/MFC-Example-CreateFile-WriteFile-save-memory-dc-bitmap-file.htm instead of memdc, you can call your picture box dc. Thanks A. Gopinath.
thx for your answer sir.. but after i try the code, i can't find image c://temp.bmp. can u tell me , how to the code work in MFC to save a image di picturebox. my problem : i will load a image to picturebox in MFC then i'm want to save it. can u give sample code about my problem?? Regard's Johannes.
-
1.) width != byte_width! byte_width == (width*(bitsperpixel/8)+3)&~3 (4byte boundary) 2.) call GetBitmapBits to get the bitmap content before save. have a nice day.
Thx sir.. but i dont understand.. Can you explain in detail the program... Regard Johannes
-
Thx sir.. but i dont understand.. Can you explain in detail the program... Regard Johannes
-
Hello try by sending this hDC to save. I didn't tried this. check whether it is working or not. HDC hDC=GetDC(GetDlgItem(IDC_PICTUREBOX); //------- id for your picture box. Save...... (hDC, ...); Thanks A. Gopinath.
sir, i got a error.. "GetDC' : function does not take 1 parameters" how about it??
-
sir, i got a error.. "GetDC' : function does not take 1 parameters" how about it??