欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)來設置圖像像素的值,比如 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實現(xiàn)數(shù)字音頻分析處理系統(tǒng)

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

    Opencv分水嶺算法學習

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

    Linux下C語言的fork()子進程函數(shù)用法及相關問題解析

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

    C語言如何實現(xiàn)BOOL類型

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

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

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

    C++使用OpenCV進行物體識別與檢測的三種方法

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

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

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

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

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

    C語言實現(xiàn)學生成績管理系統(tǒng)實戰(zhàn)教學

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

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

    “聲明”為編譯服務,用于類型檢查 ;“定義”在運行時會分配空間,不能重復定義,同時具備聲明的功能
    2013-09-09

最新評論