StretchDIBits绘制原始YUV异常
StretchDIBits绘制原始YUV图片,图片的大小是1366 * 768,界面出现花屏倾斜。
1、解决方法,将原始YUV格式大小,进行YUV缩放,达到StretchDIBits可正常绘制的分辨率,比如:1920*1280等等。
//GDI绘制YUV格式的原始数据
void GDIDrawYUV(uint8_t* data, int w, int h)
{static const int dw = 1280;static const int dh = 1080;unsigned char * dstyuv = new unsigned char[dw * dh * 3 / 2];//libyuv进行YUV数据大小转换libyuv::I420Scale(data, w,data + w * h, w / 2,data + w * h + w * h / 4, w / 2, w, h,dstyuv, dw,dstyuv + dw * dh, dw / 2,dstyuv + dw * dh + dw * dh / 4, dw / 2, dw, dh, libyuv::FilterMode::kFilterNone);unsigned char * sprgb = new unsigned char[dw*dh * 3];//libyuv进行YUV转换成RGB24libyuv::I420ToRGB24(dstyuv, dw,dstyuv + dw * dh, dw / 2,dstyuv + dw * dh + dw * dh / 4, dw / 2,sprgb, dw * 3, dw, dh);HDC hdc = GetDC(_playWnd);BITMAPINFO m_bmphdr = { 0 };DWORD dwBmpHdr = sizeof(BITMAPINFO);//24bitm_bmphdr.bmiHeader.biBitCount = 24;m_bmphdr.bmiHeader.biClrImportant = 0;m_bmphdr.bmiHeader.biSize = dwBmpHdr;m_bmphdr.bmiHeader.biSizeImage = 0;m_bmphdr.bmiHeader.biWidth = dw;m_bmphdr.bmiHeader.biHeight = -dh;m_bmphdr.bmiHeader.biYPelsPerMeter = 0;m_bmphdr.bmiHeader.biXPelsPerMeter = 0;m_bmphdr.bmiHeader.biClrUsed = 0;m_bmphdr.bmiHeader.biPlanes = 1;m_bmphdr.bmiHeader.biCompression = BI_RGB;RECT rtWnd;::GetClientRect(_playWnd, &rtWnd);size_t wndWidth = abs(rtWnd.right - rtWnd.left);size_t wndHeight = abs(rtWnd.bottom - rtWnd.top);SetStretchBltMode(hdc, STRETCH_HALFTONE);//问题点:当出现特殊YUV分辨率时,调用此api导致绘制的效果为倾斜黑白,所以之前进行一次YUV缩放int nResult = StretchDIBits(hdc,0, 0,wndWidth, wndHeight,0, 0,dw, dh,sprgb,&m_bmphdr,DIB_RGB_COLORS,SRCCOPY);if (nResult == GDI_ERROR){LOG_ERROR << "StretchDIBits return error";}delete[]dstyuv;delete[]sprgb;ReleaseDC(_playWnd, hdc);
}
还有其他解决方法,请留言一起学习学习。
StretchDIBits绘制原始YUV异常相关推荐
- FFmpeg4.1 视频解码,保存原始YUV数据
FFmpeg4.1 视频解码,保存原始YUV数据 原文:https://blog.csdn.net/qq_38421080/article/details/86520612 网上文章都太老,本文基于F ...
- 读取笔记本的摄像头的原始yuv数据,通过libav(ffmpeg编码)
一.程序的逻辑主要分两部分: 1.通过video4linux2读取摄像头的V4L2_PIX_FMT_YUYV格式的原始数据 2.把V4L2_PIX_FMT_YUYV格式的数据转换成AV_PIX_FMT ...
- 在yuv上画线_利用布雷森汉姆算法绘制在YUV图像上画直线
最近,因工作需要,在YUV图像上画直线: 算法1步骤: 1.已知直线的起点和终点: 2. 利用布雷森汉姆算法在两点间画直线: 3. 将该直线上的点的颜色在YUV图像上画出. 布雷森汉姆算法原理参考wi ...
- 音视频数据处理入门:原始视频格式YUV,NV12,NV21,YV12,YU12(I420)
我们知道,在Camera中设置Preview的回调函数onPreviewFrame时谷歌推荐我们使用NV21,YV12两种格式,因为这两种格式几乎在所有的设备里都通用.然而,视频的格式远远不止这俩种, ...
- cad详图怎么画_CAD原始结构图如何绘制?
原标题:CAD原始结构图如何绘制? CAD原始结构图绘制 原始结构图是设计师对房屋结构进行实地测量之后,根据测量数据放样出的平面图纸,其中包括房屋整体结构.空间结构.门口.窗户的位置尺寸等.原始结构图 ...
- 常见视频原始数据格式分析 — YUV
1. YUV 简介 YUV 是比较常用的原始视频数据数据格式,视频采集芯片输出的码流大部分都是 YUV 数据流形式,而视频处理(如 H264.H265编码等),也是在原始 YUV 码流进行编码和解析. ...
- 智能运维探索:有一种多指标异常检测方案,你可能没用过...
各行业信息化程度迅猛发展的今天,各大企业的信息系统也日趋庞大和复杂. 为了保证系统的正常运行,企业的运维人员会通过相应的KPI(Key Performance Indicator, 关键性能指标)对系 ...
- 01 Qt6.2.3播放YUV视频,使用QOpenGLWidget
Qt6.2.3播放YUV视频,使用QOpenGLWidget 作者 将狼才鲸 创建日期 2022-03-30 工程Gitee源码地址:qt_gui_simple2complex/ source / 0 ...
- springMVC自定义全局异常
SpringMVC通过HandlerExceptionResolver处理程序异常,包括Handler映射,数据绑定以及目标方法执行时所发生的异常. SpringMVC中默认是没有加装载Handler ...
- matlab显示YCrCb的图像,【Matlab系列】读取并显示YUV视频文件
Date: 2019-5-12 1.读取并显示YUV视频文件Matlab代码 %% 1.读取视频内容并显示 fid = fopen('akiyo_cif.yuv','r'); %读入YUV文件 row ...
最新文章
- 如何使用PHP发送电子邮件?
- 将二叉搜索树转换为有序的双向链表
- ADO.NET数据库操作------SqlDataReader和SqlDataAdapter 区别
- open、read、write、文件类型
- oracle gtx,ORACLE
- 【操作系统复习】系统调用
- PL/SQL Developer调试Oracle存储过程
- AD+DNS安装步骤详解
- 在Linux服务器上配置phpMyAdmin
- 作者:冯仕政(1974-),男,中国人民大学社会与人口学院教授、副院长。
- windows c++ 原子操作_高分辨质谱数据处理操作篇
- linux下查看内存频率,内核函数,cpu频率
- 【3dmax千千问】食住玩初学3dmax插件神器第24课:3dmax自学渲染效果图教程|疯狂模渲大师、室内设计师、效果图绘图员都应该如何认识VRAY或扫描线CORONA渲染器及其VR核心算法的作用?
- 基于MFAC无模型自适应控制的无人艇航向控制
- 这5个是不是元宇宙游戏遗珠?
- 如何解决:微云下载文件总是下载失败
- 百度地图API的两种加载方式
- 淘宝网上免费注册页面的错误
- python头像变二维码_学了Python之后,美化二维码如此简单
- 粽子大战 —— 猜猜谁能赢
热门文章
- ROS2机器人笔记22.02.17
- matlab二元积分函数求导,多元函数求积分求导.ppt
- java规则引擎Drools实战
- CUDA版本与显卡驱动匹配
- 科技公司网页设计(h5 + css3)
- 106.比特率和波特率
- arcgispython空间插值_[学习总结]如何利用GIS建模批量处理气象数据-以micaps 第四类数据空间插值为例-专业气象研究-气象家园_气象人自己的家园...
- c语言星钻图形的输出
- 拯救者Y7000拆机清灰方法及加装机械硬盘
- nutch2.3.1 mysql_Nutch-NewsClassify