視頻問題,從攝像頭流中捕捉一張圖片。用ISampleGrabber方法 (by Atomictry(天影))
//函數說明 /* * 本地顯示函數 */ HRESULT StartDisplay(HWND hwnd); /* * 建立鏈路 */ HRESULT BuilderGraph() /* * 拍照 */ HRESULT SnapStill() /* * 修改攝像頭分辨率,色深,頻率 */ BOOL SetFormat(ICaptureGraphBuilder2* pBuilder, IBaseFilter* pCap, long lWidth, long lHeight, unsigned short iColorBit, __int64 iRate ) HRESULT StartDisplay(HWND hwnd) { HRESULT hr = S_OK; hr = BuilderGraph(); if(hr==S_FALSE) return S_FALSE; //Create Display Windows pSendWindow->put_Owner((OAHWND)hwnd); pSendWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN); pSendWindow->SetWindowPosition(0,0,250,250); pSendWindow->put_Visible(OATRUE); hr = pGrabber->SetOneShot(FALSE); hr = pGrabber->SetBufferSamples(TRUE); //Begin display hr=pSendControl->Run(); Sleep(500); SnapStill(); return S_OK; } HRESULT BuilderGraph() { HRESULT hr=S_OK; pSendGraph=NULL; pCaputerFilter=NULL; pCaputerBuilder=NULL; pSendWindow=NULL; pSendControl=NULL; pSendEvent=NULL; pGrabberSample = NULL; //1.Builder Filter Graph hr=CoCreateInstance((REFCLSID)CLSID_FilterGraph,NULL, CLSCTX_INPROC_SERVER, (REFIID)IID_IGraphBuilder, (void**)&pSendGraph); if(FAILED(hr)) return S_FALSE; //2.Builder Caputer Filter hr=CoCreateInstance(CLSID_CaptureGraphBuilder2,NULL, CLSCTX_INPROC,IID_ICaptureGraphBuilder2, (void**)&pCaputerBuilder); if(FAILED(hr)) return S_FALSE; //3.Builder SampleGrabber Filter hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pGrabberSample); if(FAILED(hr)) return S_FALSE; hr=pCaputerBuilder->SetFiltergraph(pSendGraph); if(FAILED(hr))return S_FALSE; //Find Caputer Filter hr=FindCaputerDevice(); if(FAILED(hr)) { SAFE_RELEASE(pCaputerBuilder); SAFE_RELEASE(pSendGraph); return S_FALSE; } hr =pSendGraph->AddFilter(pNetSend,NULL); hr =pSendGraph->AddFilter(pCaputerFilter,L"Caputer Filter"); hr =pSendGraph->AddFilter(pCompressor,L"Compressor Filter"); hr = pSendGraph->AddFilter(pGrabberSample, L"Sample Grabber"); hr=pSendGraph->QueryInterface(IID_IMediaControl,(void**)&pSendControl); if(FAILED(hr)) return S_FALSE; hr=pSendGraph->QueryInterface(IID_IVideoWindow,(void**)&pSendWindow); if(FAILED(hr)) return S_FALSE; hr=pSendGraph->QueryInterface(IID_IMediaEvent,(void**)&pSendEvent); if(FAILED(hr)) return S_FALSE; hr=pGrabberSample->QueryInterface(IID_ISampleGrabber, (void**)&pGrabber); if(FAILED(hr)) return S_FALSE; // 修改分辨率 SetFormat(pCaputerBuilder, pCaputerFilter, 640, 480, 24, 30); //Display local video hr=pCaputerBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,NULL,pCaputerFilter,pGrabberSample,NULL); if(FAILED(hr)) return S_FALSE; return S_OK; } HRESULT SnapStill() { HRESULT hr; long cbBuffer = 0; hr = pGrabber->GetCurrentBuffer(&cbBuffer, NULL); if(FAILED(hr)) return E_FAIL; char *pBuffer = new char[cbBuffer]; if (!pBuffer) { // Deal Out of memory. Return an error code. } hr = pGrabber->GetCurrentBuffer(&cbBuffer, (long*)pBuffer); if(FAILED(hr)) return E_FAIL; //生成Bitmap AM_MEDIA_TYPE mt; hr = pGrabber->GetConnectedMediaType(&mt); if (FAILED(hr)) return E_FAIL; VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)mt.pbFormat; if(pVideoHeader==NULL) return E_FAIL; BITMAPINFO BitmapInfo; ZeroMemory(&BitmapInfo, sizeof(BitmapInfo)); CopyMemory(&BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER)); HBITMAP hBitmap; hBitmap = ::CreateDIBitmap(::GetDC(NULL), &(pVideoHeader->bmiHeader), CBM_INIT, pBuffer, &BitmapInfo, DIB_RGB_COLORS); if(hBitmap==NULL) return E_FAIL; CString strSaveFileName=""; CFileDialog filedlg(FALSE,_T("bmp"),_T(""),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("BMP(*.bmp)")); if(filedlg.DoModal()==IDOK){ strSaveFileName=filedlg.GetPathName(); SaveBitmapToFile(hBitmap,strSaveFileName.GetBuffer(0)); } return hr; } BOOL SetFormat(ICaptureGraphBuilder2* pBuilder, IBaseFilter* pCap, long lWidth, long lHeight, unsigned short iColorBit, __int64 iRate ) { VIDEOINFOHEADER* phead; IAMStreamConfig* iconfig; HRESULT hr; hr = pBuilder -> FindInterface( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Interleaved, pCap, IID_IAMStreamConfig, (void **)&iconfig ); if ( hr != NOERROR ) { hr = pBuilder -> FindInterface( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, pCap, IID_IAMStreamConfig, (void **)&iconfig); } if ( FAILED( hr ) ) return FALSE; AM_MEDIA_TYPE* pmt; if ( iconfig -> GetFormat( &pmt ) != S_OK ) return FALSE; if ( pmt -> formattype == FORMAT_VideoInfo) { phead = ( VIDEOINFOHEADER* )pmt -> pbFormat; phead -> bmiHeader.biBitCount = iColorBit; phead -> bmiHeader.biWidth = lWidth; phead -> bmiHeader.biHeight = lHeight; phead -> bmiHeader.biSizeImage = lWidth * lHeight * iColorBit / 8; phead -> AvgTimePerFrame = iRate; if ( ( hr = iconfig -> SetFormat( pmt ) ) != S_OK ) return FALSE; } iconfig -> Release(); iconfig = NULL; FreeMediaType( *pmt ); return TRUE; }
作者:vivo 互聯網大前端團隊 - Ma Lian 本文主要描述了FileProvider,startAnyWhere實現,Parcel不對稱漏洞以及這三者結合產生的漏洞利用實戰,另外闡述了漏洞利用的影響和修復預防措施,這個漏洞波及了
本文分享自華爲雲社區《GaussDB SQL基本語法示例-CASE表達式》,作者:Gauss松鼠會小助手2。 一、前言 SQL是用於訪問和處理數據庫的標準計算機語言。GaussDB支持SQL標準(默認支持SQL2、SQL3和SQL4的主要
Impala目前支持Hadoop中幾種常見的文件格式 Parquet 、 ORC 、 Text 、 Avro 、 RCFile 和 SequenceFile 。下面簡要說明各種格式的使用、限制和一些注意事項。 不同的文件格式有着不同的適用場
本文分享自華爲雲社區《手拉手入門springboot+kafka》,作者:QGS。 安裝kafka 啓動Kafka本地環境需Java 8+以上 Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,它可以處理消費者在網站中的所有動作流數據。
作者:胡安祥 滿幫集團,作爲“互聯網+物流”的平臺型企業,一端承接託運人運貨需求,另一端對接貨車司機,提升貨運物流效率。2021 年美股上市,成爲數字貨運平臺上市第一股。根據公司年報,2021 年,超過 350 萬貨車司機在平臺上完成超 1
作者:Seata 社區 Part 1:歡迎大家報名 Apache Seata (incubating) 開源之夏 2024 課題 開源之夏 2024 學生報名期爲 4 月 30 日 - 6 月 3 日,歡迎報名 Apache Seata(i
圖片來源:國家航天局網站 近日,嫦娥六號任務還搭載了多個國際合作項目,包括法國的氡氣探測儀、歐空局(歐洲航天局(英文:European Space Agency),簡稱歐空局或ESA)的負離子探測儀、意大利的激光角反射鏡
轉載自tuoluzhe8521 導讀:通過簡化複雜的任務依賴關係, DolphinScheduler爲數據工程師提供了強大的工作流程管理和調度能力。在3.2.0版本中,DolphinScheduler帶來了一系列新功能和改進,使其在生產環
服務發現 在Spring cloud中,要注意區別服務和服務實例,這是兩個概念,一個微服務單元可以部署多個節點, 每個節點即一個服務實例,Spring cloud默認通過 spring.application.name 配置項來標識一個微服
本文作者: 張顯華、竇智浩、盧進文 與集中式架構相比,分佈式架構的系統複雜性呈指數級增長,混沌工程在信創轉型、分佈式架構轉型、小機下移等過程中有效保障了生產的穩定性。本文分享了 TiDB 分佈式數據庫在銀行核心業務系統落地中進行混沌測試的場
漏洞概述 漏洞服務: uhttpd 漏洞類型: 遠程命令執行 影響範圍: 1.0.4.26之前的NETGEAR R9000設備會受到身份驗證繞過的影響 解決建議: 更新版本 漏洞復現 操作環境: ubuntu:22.04 qemu-ve
1.redis未授權訪問漏洞 通過redis未授權訪問漏洞,會造成敏感信息泄露,甚至被利用直接控制服務器,其危害不言而喻。但是在實際工作中,發現一些開發人員和運維人員並不知道如何妥善配置。因此有了本文,對redis的配置,建議就是2條,一
1.hive 1.1 解壓 tar -zxf apache-hive-1.2.2-bin.tar.gz -C .. mv apache-hive-1.2.2-bin/ hive-1.2.2 1.2 修改配置
4月19日,Meta發佈了最新的大語言模型LLaMA3,具體包括一個 8B 模型和一個 70 B 模型,上下文長度支持8K, 被譽爲史上最強開源大語言模型,開源社區的“重磅炸彈”,效果直指GTP4。在諸多評測任務上,LLaMA3都有非常炸裂
操作系統Debian12 1. portainer 簡介 Portainer 是一個開源的輕量級容器管理工具,主要用於 Docker 和 Swarm 環境的可視化管理和操作。通過 Portainer,用戶可以通過簡潔易用的 Web UI