FFMPEG -读取视频文件并转换为位图
FFMPEG - Read video file and convert to Bitmap
我可以使用ffmpeg成功读取视频文件
现在我想在我的MFC mdi上显示这些视频帧。
为此,我需要一个位图来馈送我的CBitmap::FromHandle()函数
memDC.CreateCompatibleDC(dc);
CBitmap * bmp = CBitmap::FromHandle();
CBitmap * oldBmp = memDC.SelectObject(bmp);
dc->BitBlt(0,0,320,240,&memDC,0,0,SRCCOPY);
对于ffmpeg,我使用危险教程01
http://dranger.com/ffmpeg/tutorial01.html请告知如何将帧转换为位图
谢谢
过去3天我一直在做这件事,直到现在
现在帧被BitBlt到dc成功,但它们是颠倒的
如果代码有什么问题请告诉我
avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,
pCodecCtx->width, pCodecCtx->height);
int w = pCodecCtx->width;
int h = pCodecCtx->height;
img_convert_ctx = sws_getContext(w, h, pCodecCtx->pix_fmt,
w, h, PIX_FMT_RGB24,
SWS_BICUBIC, NULL, NULL, NULL);
/*CClientDC dc;*/
BITMAPINFO bmi = {0};
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biHeight = -pCodecCtx->height;
bmi.bmiHeader.biWidth = pCodecCtx->width;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biSizeImage = pCodecCtx->height * pCodecCtx->width * 3;
hbmp = CreateDIBSection(hdcmem, &bmi, DIB_RGB_COLORS, &pbmpdata , NULL, 0); //&pbmpdata
hdcscr = GetDC(0);
hdcmem = CreateCompatibleDC(hdcscr);
i=0;
while((av_read_frame(pFormatCtx, &packet)>=0)) {
// Is this a packet from the video stream?
if(packet.stream_index==videoStreamIdx) {
/// Decode video frame
//avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,packet.data, packet.size);
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
// Did we get a video frame?
if(frameFinished) {
i++;
sws_scale(img_convert_ctx, pFrame->data,
pFrame->linesize, 0, pCodecCtx->height,
pFrameRGB->data, pFrameRGB->linesize);
pFrameRGB->data[0] = (uint8_t*)pbmpdata;
pFrameRGB->linesize[0] = pCodecCtx->width * 3;
SelectObject(hdcmem, hbmp);//hbmp
BitBlt(hdcscr, 0, 0, pCodecCtx->width, pCodecCtx->height, hdcmem , 0, 0, SRCCOPY);
Sleep(10);
}
}
// Free the packet that was allocated by av_read_frame
av_free_packet(&packet);
}
相关文章:
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 将位图 (bmp) 转换为具有透明度的 png (Windows c++)
- 将Qt qml文件转换为位图图像
- 将 8bpp 位图转换为 32bpp 位图C++
- 错误 C2440:无法将"系统::D rawing::位图"转换为"系统::对象"
- 如何将屏幕截图位图转换为 cv::Mat
- 如何正确将位图转换为 OpenCV 灰度垫
- 将 GDI Plus 位图转换为 QPixmap
- 将位图转换为opencv :: mat in Jni
- 在C++中将彩色位图转换为灰度
- 将整数转换为位图颜色 RGB 值 C++
- 将 32bpp 位图转换为 256 种颜色
- 将原始位图转换为QT中的png
- 如何将位图字体从 C 标头格式转换为原始位
- 将opencv图像转换为gdi位图不起作用取决于图像大小
- C++:将整数的文本文件转换为BMP格式的位图图像文件
- 在内存中将屏幕截图位图转换为jpeg
- 将hDC转换为4bpp位图
- 原始位图数据转换为 JPEG 或 PNG C++
- 如何在C++(没有 .NET)将 PDF 转换为位图(栅格化)