VC++应用

From Ffmpeg工程组

Jump to: navigation, search

[编辑] 请问AVPicture如何转换成Bitmap数据?

#include <windows.h>
static int av_create_bmp(char* filename,uint8_t *pRGBBuffer,int width,int height,int bpp)
{
   BITMAPFILEHEADER bmpheader;
   BITMAPINFO bmpinfo;
   FILE *fp;

   fp = fopen(filename,"wb");
   if(!fp)return -1;

   bmpheader.bfType = ('M'<<8)|'B';
   bmpheader.bfReserved1 = 0;
   bmpheader.bfReserved2 = 0;
   bmpheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
   bmpheader.bfSize = bmpheader.bfOffBits + width*height*bpp/8;
        
   bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
   bmpinfo.bmiHeader.biWidth = width;
   bmpinfo.bmiHeader.biHeight = height;
   bmpinfo.bmiHeader.biPlanes = 1;
   bmpinfo.bmiHeader.biBitCount = bpp;
   bmpinfo.bmiHeader.biCompression = BI_RGB;
   bmpinfo.bmiHeader.biSizeImage = 0;
   bmpinfo.bmiHeader.biXPelsPerMeter = 100;
   bmpinfo.bmiHeader.biYPelsPerMeter = 100;
   bmpinfo.bmiHeader.biClrUsed = 0;
   bmpinfo.bmiHeader.biClrImportant = 0;

   fwrite(&bmpheader,sizeof(BITMAPFILEHEADER),1,fp);
   fwrite(&bmpinfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);
   fwrite(pRGBBuffer,width*height*bpp/8,1,fp);
   fclose(fp);

   return 0;
}

//------------------------------------
img_convert((AVPicture *)pFrameRGB, 
             PIX_FMT_BGR24,(AVPicture*)pFrame,
             pCodecCtx->pix_fmt,
             pCodecCtx->width,pCodecCtx->height);

av_create_bmp(filename,pFrameRGB->data[0],pCodecCtx->width,pCodecCtx->height,24);
原文地址:ffmepg工程组 请问AVPicture如何转换成Bitmap数据?
Personal tools