1. 程式人生 > >24位RGB資料儲存為BMP圖片

24位RGB資料儲存為BMP圖片

在做Qt與ffmpeg結合的視訊播放器時,由於解碼後是RGB24資料格式,不知道解碼的資料是否正確,於是在網上找了很久才找到一個RGB24轉bmp檔案的方法,於是嘗試了一下,發現生成的bmp檔案是電影中的片段截圖,才知道解碼的RGB24資料是正確的,最終才成功用Qt顯示出視訊影象。
以下程式碼為轉載的,原文地址:
http://blog.csdn.net/wesleyluo/article/details/6561518

bool SaveDIB2Bmp(int fileNum, const char * fileName, const char * filePath, int iWidth, int
iHeight, BYTE *pBuffer) { BITMAPINFOHEADER bih; ConstructBih(iWidth,iHeight,bih); BITMAPFILEHEADER bhh; ContructBhh(iWidth,iHeight,bhh); CHAR BMPFileName[1024]; int widthStep = (((iWidth * 24) + 31) & (~31)) / 8 ; //每行實際佔用的大小(每行都被填充到一個4位元組邊界) int DIBSize = widthStep * iHeight ; //buffer的大小 (位元組為單位)
//save char path[1024]; char str[1024]; char num[10]; sprintf(num,"%d",fileNum); sprintf(str, fileName); strcat(str, num); strcat(str,".bmp"); //frame100.bmp sprintf(path,"%s", filePath); strcat(path,str); //Path//frame100.bmp strcpy(BMPFileName,path); FILE *file; if
(file = fopen(BMPFileName, "wb")) {//寫入檔案 fwrite((LPSTR)&bhh,sizeof(BITMAPFILEHEADER), 1, file); fwrite((LPSTR)&bih,sizeof(BITMAPINFOHEADER), 1, file); fwrite(pBuffer, sizeof(char), DIBSize, file); fclose(file); return true; } return false; } //構建BMP點陣圖檔案頭 void ContructBhh(int nWidth,int nHeight,BITMAPFILEHEADER& bhh) //add 2010-9-04 { int widthStep = (((nWidth * 24) + 31) & (~31)) / 8 ; //每行實際佔用的大小(每行都被填充到一個4位元組邊界) bhh.bfType = ((WORD) ('M' << 8) | 'B'); //'BM' bhh.bfSize = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER) + widthStep * nHeight; bhh.bfReserved1 = 0; bhh.bfReserved2 = 0; bhh.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER); } //構建BMP檔案資訊頭 void ConstructBih(int nWidth,int nHeight,BITMAPINFOHEADER& bih) { int widthStep = (((nWidth * 24) + 31) & (~31)) / 8 ; bih.biSize=40; // header size bih.biWidth=nWidth; bih.biHeight=nHeight; bih.biPlanes=1; bih.biBitCount=24; // RGB encoded, 24 bit bih.biCompression=BI_RGB; // no compression 非壓縮 bih.biSizeImage=widthStep*nHeight*3; bih.biXPelsPerMeter=0; bih.biYPelsPerMeter=0; bih.biClrUsed=0; bih.biClrImportant=0; }

相關推薦

24RGB資料儲存BMP圖片

在做Qt與ffmpeg結合的視訊播放器時,由於解碼後是RGB24資料格式,不知道解碼的資料是否正確,於是在網上找了很久才找到一個RGB24轉bmp檔案的方法,於是嘗試了一下,發現生成的bmp檔案是電影中的片段截圖,才知道解碼的RGB24資料是正確的,最終才成功用

RGB資料儲存BMP圖片

一、BMP檔案由檔案頭、點陣圖資訊頭、顏色資訊和圖形資料四部分組成。 1、BMP檔案頭(14位元組) typedefstruct/**** BMP file header structure ****/ {       unsigned int   bfSize;

如何將10進資料儲存2進資料(IMG2LCD的使用,pic2bin)

背景    fpga處理大資料時從txt讀取資料形式為2進位制或者16進位制,&readmemb/&readmemh,所以需要將資料轉換為二進位制或十六進位制存在txt中。 針對影象而言可以參考exe>IMG2LCD 下

純C++程式碼實現將畫素矩陣儲存bmp圖片

       用C++程式碼將畫素矩陣儲存為圖片,這裡以讀取yuv序列視訊幀為例進行分析,假設4:2:0yuv序列有300幀,則首先需要將每一視訊幀儲存在一個畫素矩陣中,然後將每一個矩陣儲存為圖片,最終會有300個bmp圖片。       純C++程式碼如下:       s

C++將HBITMAP儲存bmp圖片

BOOL CBMP2ArrayMultiplyDlg::SaveBitmapToFile(HBITMAP hBitmap, CString szfilename) { HDC hDC; //當前解析度下每象素所佔位元組數

使用ffmpeg將BMP圖片編碼x264視訊檔案,將H264視訊儲存BMP圖片,yuv視訊檔案儲存圖片的程式碼

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> #ifdef __cplusplus extern "C" { #endif #include

libqrencode學習筆記(二): 用libqrencode靜態庫庫生成二維碼並儲存BMP圖片

#include <stdio.h> #include <Windows.h> #include <qrencode.h> #pragma comment(lib,"libqrencode.lib") int main() { const char * QRTEXT

raw資料新增影象頭,並儲存bmp影象(改進)

改進:不再從參考影象讀調色盤,程式內部建立調色盤 #include "stdio.h" #include "Windows.h" unsigned char *pBmpBuf;//讀入影象資料的指標 int bmpWidth;//影象的寬 int bmpHeight;//

YUV420儲存BMP和JPG圖片

       網上大多數關於YUV420的資料都是關於YUV420P的,很少有YUV420SP的,因為YUV420SP的UV是交錯存放的,處理起來相對麻煩點,但是YUV420SP也是一種常見格式,因此,在這裡,我將關於YUV420SP格式資料的處理總結下,方便有需要的同志。

Java實現24真彩轉換8灰度圖片

         Windows下的點陣圖檔案即我們通常所熟悉的BMP圖片,其儲存結構的格式可以在WINGDI.h檔案中找到定義。BMP檔案大體上分為四個部分: 1.      點陣圖檔案頭(BITMAPFILEHEADER) 2.      點陣圖資訊頭(BITMAPIN

BMP--24真彩色轉換灰度影象

以下文字內容來自http://zhidao.baidu.com/question/152910968.html中的部分內容 把RGB值轉換為灰度值的公式: Gray   :=   Trunc(0.3   *   Red   +   0.59   *   Green  

獲取視訊的每一幀,並儲存.jpg圖片

#include<opencv2\opencv.hpp> #include <iostream> #include <stdio.h> #include<fstream> using namespace std; using names

簡單知識點例項之一:如何將各個單一獲取的資料儲存陣列物件並將其取出

一、將獲取的值存為陣列或陣列物件 (1)存為陣列(例如所有怪物的id值可以存為陣列) 是以逗號隔開的,建議用到存單個特定值時用(如光存id值時) <!DOCTYPE html> <html lang="en"> <head> <

爬蟲資料儲存csv檔案時,表格中間隔有空行問題

問題描述:將爬取的資料儲存的csv檔案,遇到幾個問題,原始碼如下: with open('F:\\Pythontest1\\douban.csv','w') as f: writer = csv.writer(f,dialect='excel') writer.writero

nrrd格式用Python讀取並儲存png圖片

安裝pynrrd pip install pynrrd pip install git+https://github.com/mhe/pynrrd.git cd pynrrd pip install . 如果報錯了,則輸入 python setup.py install 注意:

Python Pillow (PIL) Image.save 儲存jpg圖片壓縮問題

在使用Pillow中的Image.save()方法,使用預設引數儲存jpg圖片的過程中發現圖片被壓縮的很嚴重,導致原來很大的大小變成幾十K。這是因為在儲存為jpg的過程中,內部使用壓縮演算法對圖片進行的壓縮處理。 但是有些時候往往需要圖片的大小不能變化太大或不能太小。所以在

iOS -FDMB 資料儲存blob後的增刪改查

  2018.10.31 FMDB是iOS平臺下的SQLite資料庫,以OC方式封裝後,更加方便快捷。 沒學資料庫之前,一直糾結用什麼方式能夠持久儲存且追加不覆蓋,直到看到了離線快取SQLite。 FMDB應用在當前的專案中,儲存好友資料,以往都是id主鍵加各種型別作為

mysql16進資料轉換10進資料

需求:表中的資料的16進位制儲存在資料庫中,先需要將資料按照10進位制進行輸出解決方法:使用mysql自帶的conv函式進行資料轉換語法如下:conv(N,from base ,to base)例項1:SELECT conv( '0a', 16, 10 )例項2:set @n = "0926F281";sel

獲取當前螢幕影象並儲存bmp檔案

此函式建立了1080p高清圖片,即解析度為:1920 x  1080 如果想建立不同的解析度圖片,可以修改函式中的 nWidth 和 nHeight. 此文僅供參考,如有不妥之處,請多多指教。 void Create1080p() {     int nWidth = 19

VC++擷取螢幕(截圖)並存bmp圖片

  主要程式碼是:   ShowWindow(SW_HIDE);   HDC myDC=::GetDC(0);   int x=GetSystemMetrics(SM_CXSCREEN);   int y=GetSystemMetrics(SM_CYSCREEN);