亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++如何保存bmp圖片

 更新時(shí)間:2023年08月04日 16:59:33   作者:老光私享  
這篇文章主要介紹了C++如何保存bmp圖片問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C++保存bmp圖片

在 C 語(yǔ)言中,你可以使用 Windows 圖像處理庫(kù)(Windows GDI)來(lái)保存 BMP 圖片。

你需要使用到兩個(gè)重要的函數(shù):CreateBitmap 和 SaveBitmap。

  • CreateBitmap 函數(shù)用來(lái)創(chuàng)建一個(gè)位圖對(duì)象,你需要指定寬度、高度和色彩深度。
  • SaveBitmap 函數(shù)用來(lái)保存位圖到一個(gè)文件中,你需要指定文件名和位圖對(duì)象。

下面是一個(gè)簡(jiǎn)單的例子,展示了如何使用這兩個(gè)函數(shù)來(lái)保存一個(gè) BMP 圖片:

#include <windows.h>
int main()
{
? ? // 創(chuàng)建一個(gè) 200x200 像素的位圖,色彩深度為 24
? ? HBITMAP hBitmap = CreateBitmap(200, 200, 24);
? ? // 保存位圖到文件 "image.bmp"
? ? SaveBitmap(hBitmap, "image.bmp");
? ? return 0;
}

請(qǐng)注意,這個(gè)例子僅僅是一個(gè)示例,實(shí)際的圖像處理工作可能要更加復(fù)雜。

你可能需要使用其他的函數(shù)來(lái)設(shè)置圖像像素的值,比如 SetPixel 或者 BitBlt。

C++保存不同的圖片格式

保存為BMP格式

//----------------------------------------------------------------------------------
/**
\brief   將m_pBufferRGB圖像數(shù)據(jù)保存成BMP圖片
\return  無(wú)
*/
//----------------------------------------------------------------------------------
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)前時(shí)間為圖像保存的默認(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   相機(jī)保存Raw圖像
\param   pRawBuf      Raw圖像
\param   nImageSize   圖像大小
\param   srtSavePath  圖像存儲(chǔ)路徑
\return  void
*/
//----------------------------------------------------------------------------------
void CFIRADlg::SaveRawImage(BYTE* pRawBuf, int nImageSize, CString srtSavePath)
{
	if ((pRawBuf == NULL) || (srtSavePath == ""))
	{
		return;
	}
	CString strFileName = "";               // 圖像存儲(chǔ)路徑
	DWORD   dwImageSize = nImageSize;       // 寫入文件的長(zhǎng)度
	DWORD   dwBytesRead = 0;                // 文件讀取的長(zhǎng)度
	// 獲取當(dāng)前時(shí)間
	SYSTEMTIME  sysTime;
	GetLocalTime(&sysTime);
	//創(chuàng)建保存圖像的文件夾
	BOOL bRet = ::CreateDirectory(srtSavePath, NULL);
	if (bRet)
	{
		::SetFileAttributes(srtSavePath, FILE_ATTRIBUTE_NORMAL);
	}
	// 獲取當(dāng)前時(shí)間為圖像保存的默認(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é)

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

相關(guān)文章

  • 基于Matlab實(shí)現(xiàn)數(shù)字音頻分析處理系統(tǒng)

    基于Matlab實(shí)現(xiàn)數(shù)字音頻分析處理系統(tǒng)

    這篇文章主要為大家介紹了如何利用Matlab制作一個(gè)帶GUI的數(shù)字音頻分析與處理系統(tǒng)。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2022-02-02
  • Opencv分水嶺算法學(xué)習(xí)

    Opencv分水嶺算法學(xué)習(xí)

    這篇文章主要為大家詳細(xì)介紹了Opencv分水嶺算法的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Linux下C語(yǔ)言的fork()子進(jìn)程函數(shù)用法及相關(guān)問(wèn)題解析

    Linux下C語(yǔ)言的fork()子進(jìn)程函數(shù)用法及相關(guān)問(wèn)題解析

    fork()函數(shù)在Linux下可以用于產(chǎn)生一個(gè)子進(jìn)程,這里我們挑選了兩個(gè)fork相關(guān)的面試題,來(lái)看一下Linux下C語(yǔ)言的fork()子進(jìn)程函數(shù)用法及相關(guān)問(wèn)題解析
    2016-06-06
  • C語(yǔ)言如何實(shí)現(xiàn)BOOL類型

    C語(yǔ)言如何實(shí)現(xiàn)BOOL類型

    這篇文章主要介紹了C語(yǔ)言如何實(shí)現(xiàn)BOOL類型問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C語(yǔ)言文件操作詳情(二)

    C語(yǔ)言文件操作詳情(二)

    這篇文章主要介紹了C語(yǔ)言文件操作詳情,文章基于上一篇文章的內(nèi)容繼續(xù)展開(kāi)C語(yǔ)言文件操作的相關(guān)詳情,需要的小伙伴可以參考一下
    2022-04-04
  • C++使用OpenCV進(jìn)行物體識(shí)別與檢測(cè)的三種方法

    C++使用OpenCV進(jìn)行物體識(shí)別與檢測(cè)的三種方法

    物體識(shí)別與檢測(cè)是計(jì)算機(jī)視覺(jué)中的核心任務(wù)之一,它被廣泛應(yīng)用于自動(dòng)駕駛、安防監(jiān)控、圖像分析等領(lǐng)域,通過(guò)物體檢測(cè)技術(shù),計(jì)算機(jī)能夠從圖像中識(shí)別出特定的物體或目標(biāo),本文將介紹如何使用 C++ 和 OpenCV 庫(kù)進(jìn)行物體識(shí)別與檢測(cè),需要的朋友可以參考下
    2025-04-04
  • C++ Sort函數(shù)使用場(chǎng)景分析

    C++ Sort函數(shù)使用場(chǎng)景分析

    sort函數(shù)是algorithm庫(kù)下的一個(gè)函數(shù),sort函數(shù)是不穩(wěn)定的,即大小相同的元素在排序后相對(duì)順序可能發(fā)生改變,如果某些場(chǎng)景需要保持相同元素間的相對(duì)順序,可使用stable_sort函數(shù),接下來(lái)通過(guò)本文給大家介紹C++ Sort函數(shù)詳解,感興趣的朋友一起看看吧
    2025-04-04
  • VC自定義消息響應(yīng)函數(shù)postmessage用法示例

    VC自定義消息響應(yīng)函數(shù)postmessage用法示例

    這篇文章主要介紹了VC自定義消息響應(yīng)函數(shù)postmessage用法示例,并對(duì)比說(shuō)明了postmessage與sendmessage的用法區(qū)別,需要的朋友可以參考下
    2014-10-10
  • C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)實(shí)戰(zhàn)教學(xué)

    C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)實(shí)戰(zhàn)教學(xué)

    在本篇文章里小編給大家分享了關(guān)于C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)實(shí)戰(zhàn)教學(xué)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2019-01-01
  • c/c++中變量的聲明和定義深入解析

    c/c++中變量的聲明和定義深入解析

    “聲明”為編譯服務(wù),用于類型檢查 ;“定義”在運(yùn)行時(shí)會(huì)分配空間,不能重復(fù)定義,同時(shí)具備聲明的功能
    2013-09-09

最新評(píng)論