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;
}
相關推薦
24位RGB資料儲存為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);