在MFC环境中打开并播放一个YUV格式的视频文件 怎么实现这个问题 如何使用DirectDraw直接显示YUV视频数据
\u5728MFC\u73af\u5883\u4e2d\u6253\u5f00\u5e76\u64ad\u653e\u4e00\u4e2aYUV\u683c\u5f0f\u7684\u89c6\u9891\u6587\u4ef6 \u600e\u4e48\u5b9e\u73b0\u8fd9\u4e2a\u95ee\u9898\u53ef\u4ee5\u53bb\u7f51\u4e0a\u627e\u4e2aYUV\u7684DirectShow\u89e3\u7801filter\uff0c\u7136\u540e\u521b\u5efa\u4e00\u4e2aDirectShow graph\uff0c\u628a\u7ed3\u679c\u8f93\u51fa\u8f6c\u53d1\u5230MFC\u7a0b\u5e8f\u3002
\u4f7f\u7528DirectDraw\u663e\u793aYUV\u89c6\u9891\uff0c\u6211\u6ca1\u8bd5\u8fc7\uff0c\u770b\u770b\u4e0b\u9762\u8d44\u6599\u5427
http://yeyingxian.blog.163.com/blog/static/3447124200610169275913/
第一,了解视频格式,知道怎么样从文件中把一帧帧视频数据读取出来。比如可以读取文件头信息,根据头信息来确认所需的各个参数。如果是没规范的视频裸数据,就根据事由定义的分辩率和YUV格式来确认如果读取帧数据,比如是320*240,YUV422,那一帧的数据是320*240*2,每隔这么多数据,就是一帧了。
第二,使用转换公式把YUV转换成RGB。具体代码百度一下即有。
第三,会使用directdraw,不会的话先百度一下学会使用。搞视频显示的,都要使用这个低层的画图库。效率高
第四,开一个40MS的定时器(因为帧率为25Hz,所以每40MS显示画一帧)。每隔40MS操作一次:从文件中准确读取出一帧YUV图像数据,把YUV视频数据转换成RGB图像数据,使用directdraw把RGB图像数据画到窗口。一直循环,把文件中数据全部显示完毕。
(把问题这样区分后,各个百度一下,基本可以得到代码,这个是搞开发的基本技能)
注:路人是搞视频监控产品开发的,本来是想百度一下有什么润侯汤,不小心看到这个问题,就助人为乐一下。以上回答信不信由你,满不满意由你,不用给分的!
绛旓細dc.FillRect(&rect,&m_brush);//鐢╞rush1鏍煎紡鍒 // if((x!=NULL)&&(y!=NULL))// { dc.TextOut(9,9,"ff");//瀛楃姘村钩锛圵idtix锛夎緭鍑 dc.MoveTo(rect.TopLeft());dc.LineTo(x,y);//杩欎袱琛屾病鏈夊湪瀵硅瘽妗嗕腑鏄剧ず锛侊紒锛// } //UpdateWindow();鍘绘帀锛屼笉搴旇鍦∣nPaint涓...
绛旓細鑷充簬鍍忕礌瀵瑰簲銆傘傘傝兘鍏蜂綋涓浜涗箞銆傛湰韬綘鏈変竴涓浜岀淮鏁扮粍鏁版嵁y[i][j]锛岄偅涔堣浆鎹㈠悗鏀惧埌鍙︿竴涓暟缁剒[i][j]閲岄潰灏卞彲浠ュ拰鍘熷浘瀵瑰簲浜嗭紝瀵瑰簲搴旇涓嶆槸闂銆傝嚦浜庡瓨鍌紝MFC鏈夊緢澶氭柟娉曪紝姣斿鑷繁鍐欏儚绱犵偣鍜宐m鏂囦欢澶达紝姣斿閫氳繃DC杩涜HBITMAP鎿嶄綔锛岃幏寰椾竴涓爣鍑嗕綅鍥炬暟鎹啀淇濆瓨锛屾瘮濡傜敤CImage淇濆瓨绛夌瓑锛屼笉鍚屾柟寮忓...
绛旓細娉ㄥ唽, 鎵撳紑鍚庡啀瀵硅瘽妗嗗垵濮嬪寲鏃惰鍙栨枃浠舵暟鎹
绛旓細鍔犱笂#include <string.h> 濡傛灉鏄痸s2010浠ュ悗鐗堟湰搴旇鐢╯trcpy_s鍑芥暟鏉ユ浛浠trcpy
绛旓細涓 鍦∕FC搴旂敤绋嬪簭涓姞鍏ュ拰WPF鐩稿叧鐨勪唬鐮 鍏堟彁涓涓 gcnew鍏抽敭瀛楄鐢ㄤ簬寤虹珛涓涓绠″埗绫诲瀷鐨勫疄渚 鍦ㄦ湰渚嬩腑灏嗗缓绔嬩竴涓瀮鍦惧洖鏀堕泦鍚堟爤鐨勫疄渚 鎵鏈夎gcnew鍒嗛厤鐨勫唴瀛樼┖闂村皢琚瀮鍦惧洖鏀跺櫒鑷姩绠$悊 鑰屽紑鍙戜汉鍛樺苟涓嶉渶瑕佷负浠涔堟椂闂撮噴鏀惧畠浠屾搷蹇 涓轰簡浣跨敤WPF绋嬪簭 鍏抽敭鏄疭ystem::Windows::Interop::HwndSource绫 杩欎釜绫...
绛旓細鍦ㄦ樉绀虹獥鍙g殑鍑芥暟璋冪敤瀹屾瘯浠ュ悗璋冪敤UpdateWindow()鏉ュ绐椾綋杩涜鏇存柊 UpdateWindow(hwnd);//杩欎釜鍑芥暟娌℃湁骞朵笉褰卞搷娑堟伅浜х敓銆//娑堟伅寰幆 MSG msg;//瀹氫箟浜涓涓娑堟伅缁撴瀯浣撳彉閲 while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg);DispatchMessage(&msg);} / GetMessage(LPMSG lpMsg,//娑堟伅缁撴瀯鎻...
绛旓細鏈绠鍗曠殑鏂规硶鏄紝濡傛灉鍥剧墖澶у皬鍥哄畾锛屼綘璺熻釜涓涓嬪湪cview绫绘樉绀虹殑鍥剧墖宸︿笂瑙掑拰鍙充笅瑙掔殑浣嶇疆璁句负锛坸1,y1),(x2,y2)(榧犳爣鐐归偅涓や釜鐐瑰氨琛)閫氳繃LBUTTONDOWN寰楀埌褰撳墠榧犳爣浣嶇疆璁句负(x,y)鐪熷疄鍥剧墖鍍忕礌鍊间负w*h J=(x-x1)*w/(x2-x1)I=(y-y1)*H/(y2-y1)w鍜宧浣犺鎯虫槑鐧斤紝瀹规槗鎼炴贩 ...
绛旓細(2)缂栬緫椤圭洰鐨勮彍鍗曡祫婧,鍦ㄤ富妗嗘灦绐楀彛鐨勪富鑿滃崟(IDR_MAINFRAME)涓坊鍔涓涓鍚嶄负鈥滄椂閽熸帶鍒垛濈殑涓嬫媺鑿滃崟銆傚湪鈥滄椂閽熸帶鍒垛濊彍鍗曚腑娣诲姞涓変釜鑿滃崟閫夐」鈥滃惎鍔ㄦ椂閽熲濄佲滃仠姝㈡椂閽熲濆拰鈥滄椂闂磋缃濄傚苟鍦ㄨ彍鍗曞睘鎬ч」涓瀹氣滃惎鍔ㄦ椂閽熲濊彍鍗曠殑ID鏍囧彿涓篒D_START,鈥滃仠姝㈡椂閽熲濊彍鍗曠殑ID鏍囧彿涓篒D_STOP,鈥滄椂闂磋缃濊彍鍗曠殑ID鏍囧彿涓篒D...
绛旓細MFC鍩轰簬瀵硅瘽妗嗏斺斿彸閿脊鍑鸿彍鍗,骞跺搷搴斿嚱鏁般俓x0d\x0a 1銆佹柊寤涓涓鑿滃崟璧勬簮,姣斿鎶婅彍鍗曠殑ID鍙蜂负IDR_MENU1銆俓x0d\x0a\x0d\x0a 2銆佸湪ClassWizard涓璡x0d\x0a\x0d\x0a void CArcSoft_EffectDlg::OnRButtonDown(UINT nFlags, CPoint point)\x0d\x0a\x0d\x0a {// TODO: Add your message...
绛旓細1.鍦ㄤ綘鐨勫璇濇娣涓涓鎸夐挳鍜屼竴涓浘鐗囨帶浠(Picture Control).2.娣诲姞涓涓被,鎴戣繖閲屼笂浼犱笉浜,鍙兘灏.h鍜.cpp澶嶅埗杩囨潵,浣犲啀灏嗘嫹璐濆埌txt閲,鏀逛竴涓嬫墿灞曞悕灏卞彲浠ヤ簡銆傝繖鏄疨icture.h#if !defined(AFX_PICTURE_H__COPYFREE_BY_YOVAV_GAD__SOURCES_AT_SUPERMAIN_DOT_COM__INCLUDED_)#define AFX_PICTURE_H__...