C++如何保存bmp圖片
C++保存bmp圖片
在 C 語言中,你可以使用 Windows 圖像處理庫(Windows GDI)來保存 BMP 圖片。
你需要使用到兩個重要的函數(shù):CreateBitmap 和 SaveBitmap。
CreateBitmap
函數(shù)用來創(chuàng)建一個位圖對象,你需要指定寬度、高度和色彩深度。SaveBitmap
函數(shù)用來保存位圖到一個文件中,你需要指定文件名和位圖對象。
下面是一個簡單的例子,展示了如何使用這兩個函數(shù)來保存一個 BMP 圖片:
#include <windows.h> int main() { ? ? // 創(chuàng)建一個 200x200 像素的位圖,色彩深度為 24 ? ? HBITMAP hBitmap = CreateBitmap(200, 200, 24); ? ? // 保存位圖到文件 "image.bmp" ? ? SaveBitmap(hBitmap, "image.bmp"); ? ? return 0; }
請注意,這個例子僅僅是一個示例,實際的圖像處理工作可能要更加復雜。
你可能需要使用其他的函數(shù)來設置圖像像素的值,比如 SetPixel 或者 BitBlt。
C++保存不同的圖片格式
保存為BMP格式
//---------------------------------------------------------------------------------- /** \brief 將m_pBufferRGB圖像數(shù)據(jù)保存成BMP圖片 \return 無 */ //---------------------------------------------------------------------------------- void CFIRADlg::SaveImage() { // TODO: Add your control notification handler code here DWORD dwImageSize = (DWORD)(m_nImageWidth * m_nImageHeight * 3); BITMAPFILEHEADER stBfh = { 0 }; DWORD dwBytesRead = 0; SYSTEMTIME sysTime; CString strFileName = ""; //創(chuàng)建保存圖像的文件夾 BOOL bRet = CreateDirectory(m_strFilePath, NULL); if (bRet) { SetFileAttributes(m_strFilePath, FILE_ATTRIBUTE_NORMAL); } // 獲取當前時間為圖像保存的默認名稱 GetLocalTime(&sysTime); CString imagename; imagename = _T("%s\\%d_%d_%d_%d_%d_%d_%d.bmp"); strFileName.Format(imagename, m_strFilePath, sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond, sysTime.wMilliseconds); stBfh.bfType = (WORD)'M' << 8 | 'B'; //定義文件類型 stBfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); //定義文件頭大小彩色 stBfh.bfSize = stBfh.bfOffBits + dwImageSize; //文件大小 //創(chuàng)建文件 HANDLE hFile = ::CreateFile(strFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { ::WriteFile(hFile, &stBfh, sizeof(BITMAPFILEHEADER), &dwBytesRead, NULL); ::WriteFile(hFile, m_pBmpInfo, sizeof(BITMAPINFOHEADER), &dwBytesRead, NULL); //彩色 ::WriteFile(hFile, m_pBufferRGB, dwImageSize, &dwBytesRead, NULL); CloseHandle(hFile); } }
保存為RAW格式
//--------------------------------------------------------------------------------- /** \brief 相機保存Raw圖像 \param pRawBuf Raw圖像 \param nImageSize 圖像大小 \param srtSavePath 圖像存儲路徑 \return void */ //---------------------------------------------------------------------------------- void CFIRADlg::SaveRawImage(BYTE* pRawBuf, int nImageSize, CString srtSavePath) { if ((pRawBuf == NULL) || (srtSavePath == "")) { return; } CString strFileName = ""; // 圖像存儲路徑 DWORD dwImageSize = nImageSize; // 寫入文件的長度 DWORD dwBytesRead = 0; // 文件讀取的長度 // 獲取當前時間 SYSTEMTIME sysTime; GetLocalTime(&sysTime); //創(chuàng)建保存圖像的文件夾 BOOL bRet = ::CreateDirectory(srtSavePath, NULL); if (bRet) { ::SetFileAttributes(srtSavePath, FILE_ATTRIBUTE_NORMAL); } // 獲取當前時間為圖像保存的默認名稱 strFileName.Format("%s\\%d_%d_%d_%d_%d_%d_%d.raw", srtSavePath, sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond, sysTime.wMilliseconds); // 創(chuàng)建文件 HANDLE hFile = ::CreateFile(strFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) // 創(chuàng)建失敗則返回 { return; } else // 保存Raw圖像 { ::WriteFile(hFile, pRawBuf, dwImageSize, &dwBytesRead, NULL); CloseHandle(hFile); } }
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
基于Matlab實現(xiàn)數(shù)字音頻分析處理系統(tǒng)
這篇文章主要為大家介紹了如何利用Matlab制作一個帶GUI的數(shù)字音頻分析與處理系統(tǒng)。文中的示例代碼講解詳細,感興趣的小伙伴可以學習一下2022-02-02Linux下C語言的fork()子進程函數(shù)用法及相關問題解析
fork()函數(shù)在Linux下可以用于產生一個子進程,這里我們挑選了兩個fork相關的面試題,來看一下Linux下C語言的fork()子進程函數(shù)用法及相關問題解析2016-06-06VC自定義消息響應函數(shù)postmessage用法示例
這篇文章主要介紹了VC自定義消息響應函數(shù)postmessage用法示例,并對比說明了postmessage與sendmessage的用法區(qū)別,需要的朋友可以參考下2014-10-10C語言實現(xiàn)學生成績管理系統(tǒng)實戰(zhàn)教學
在本篇文章里小編給大家分享了關于C語言實現(xiàn)學生成績管理系統(tǒng)實戰(zhàn)教學內容,有興趣的朋友們可以跟著學習參考下。2019-01-01