最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++如何保存bmp圖片

 更新時間:2023年08月04日 16:59:33   作者:老光私享  
這篇文章主要介紹了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ù)來設(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);
	}
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++利用鏈表實現(xiàn)圖書信息管理系統(tǒng)

    C++利用鏈表實現(xiàn)圖書信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++利用鏈表實現(xiàn)圖書信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++計算24點的簡單程序

    C++計算24點的簡單程序

    這篇文章主要為大家詳細介紹了C++計算24點的簡單程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • CLOSE_WAIT狀態(tài)解決方案

    CLOSE_WAIT狀態(tài)解決方案

    這篇文章主要介紹了CLOSE_WAIT狀態(tài)解決方案,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言遞歸宏的具體使用

    C語言遞歸宏的具體使用

    本文介紹了階段進行多次符號替換,從而模擬遞歸效果,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-11-11
  • C++獲取文件大小的4種常見技巧分享

    C++獲取文件大小的4種常見技巧分享

    這篇文章主要介紹了C++獲取文件大小的4種常見技巧分享,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • C++資源管理操作方法詳解

    C++資源管理操作方法詳解

    系統(tǒng)中的資源,諸如動態(tài)申請的內(nèi)存,文件描述符,數(shù)據(jù)庫連接,網(wǎng)絡(luò)socket等,在不用的時候,應該及時歸還給系統(tǒng),否則就會造成內(nèi)存泄露
    2022-09-09
  • C++引用、內(nèi)聯(lián)函數(shù)與nullptr超全解析(新手避坑指南)

    C++引用、內(nèi)聯(lián)函數(shù)與nullptr超全解析(新手避坑指南)

    這篇文章主要介紹了C++引用、內(nèi)聯(lián)函數(shù)與nullptr的相關(guān)資料,引用提供別名,簡化代碼和提高性能,內(nèi)聯(lián)函數(shù)通過減少棧幀開銷優(yōu)化性能,但不能濫用,nullptr替代NULL,提供類型安全的空指針表示,需要的朋友可以參考下
    2025-12-12
  • 解析C語言中位字段內(nèi)存分配的問題

    解析C語言中位字段內(nèi)存分配的問題

    本篇文章是對C語言中位字段內(nèi)存分配的問題進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • VC中使用ADO開發(fā)數(shù)據(jù)庫應用程序簡明教程

    VC中使用ADO開發(fā)數(shù)據(jù)庫應用程序簡明教程

    這篇文章主要介紹了VC中使用ADO開發(fā)數(shù)據(jù)庫應用程序的方法,結(jié)合實例形式詳細講述了ADO的原理及VC使用ADO開發(fā)數(shù)據(jù)庫應用程序的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Qt地圖自適應拉伸的實現(xiàn)示例

    Qt地圖自適應拉伸的實現(xiàn)示例

    最近需要寫一個程序,要是讓qt到程序自適應,本文主要介紹了Qt地圖自適應拉伸的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評論

大名县| 镇赉县| 遵化市| 新兴县| 彭山县| 黔江区| 云梦县| 固镇县| 乌拉特中旗| 泽库县| 疏勒县| 余庆县| 湖南省| 杭州市| 阿克苏市| 阳原县| 彰化县| 西盟| 工布江达县| 安龙县| 南雄市| 伊金霍洛旗| 盘锦市| 当雄县| 邓州市| 扶余县| 正安县| 农安县| 白玉县| 通榆县| 台山市| 拜城县| 鸡东县| 自治县| 菏泽市| 衢州市| 资中县| 昌平区| 无锡市| 沅江市| 雷山县|