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;
}請注意,這個例子僅僅是一個示例,實際的圖像處理工作可能要更加復(fù)雜。
你可能需要使用其他的函數(shù)來設(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);
}
// 獲取當(dāng)前時間為圖像保存的默認(rèn)名稱
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; // 文件讀取的長度
// 獲取當(dāng)前時間
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
//創(chuàng)建保存圖像的文件夾
BOOL bRet = ::CreateDirectory(srtSavePath, NULL);
if (bRet)
{
::SetFileAttributes(srtSavePath, FILE_ATTRIBUTE_NORMAL);
}
// 獲取當(dāng)前時間為圖像保存的默認(rèn)名稱
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);
}
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Matlab實現(xiàn)數(shù)字音頻分析處理系統(tǒng)
這篇文章主要為大家介紹了如何利用Matlab制作一個帶GUI的數(shù)字音頻分析與處理系統(tǒng)。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2022-02-02
Linux下C語言的fork()子進(jìn)程函數(shù)用法及相關(guān)問題解析
fork()函數(shù)在Linux下可以用于產(chǎn)生一個子進(jìn)程,這里我們挑選了兩個fork相關(guān)的面試題,來看一下Linux下C語言的fork()子進(jìn)程函數(shù)用法及相關(guān)問題解析2016-06-06
C++使用OpenCV進(jìn)行物體識別與檢測的三種方法
物體識別與檢測是計算機視覺中的核心任務(wù)之一,它被廣泛應(yīng)用于自動駕駛、安防監(jiān)控、圖像分析等領(lǐng)域,通過物體檢測技術(shù),計算機能夠從圖像中識別出特定的物體或目標(biāo),本文將介紹如何使用 C++ 和 OpenCV 庫進(jìn)行物體識別與檢測,需要的朋友可以參考下2025-04-04
VC自定義消息響應(yīng)函數(shù)postmessage用法示例
這篇文章主要介紹了VC自定義消息響應(yīng)函數(shù)postmessage用法示例,并對比說明了postmessage與sendmessage的用法區(qū)別,需要的朋友可以參考下2014-10-10
C語言實現(xiàn)學(xué)生成績管理系統(tǒng)實戰(zhàn)教學(xué)
在本篇文章里小編給大家分享了關(guān)于C語言實現(xiàn)學(xué)生成績管理系統(tǒng)實戰(zhàn)教學(xué)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。2019-01-01

