日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图形操作类CBitmap 把内存数据输出到PIC控件

發(fā)布時間:2023/12/31 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图形操作类CBitmap 把内存数据输出到PIC控件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

(1):復制元數(shù)據(jù)到 HBItmap

HBITMAP CAviTestDlg::BufferToHBITMAP(LPSTR m_pBMPBuffer) { HBITMAP hShowBMP; LPSTR hDIB,lpBuffer = m_pBMPBuffer; LPVOID lpDIBBits; BITMAPFILEHEADER bmfHeader; DWORD bmfHeaderLen;bmfHeaderLen = sizeof(bmfHeader); strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);if (bmfHeader.bfType != (*(WORD*)"BM")) return NULL; hDIB = lpBuffer + bmfHeaderLen;//寫入文件頭 BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ; BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ; int m_bmW = bmiHeader.biWidth; int m_bmH = bmiHeader.biHeight; lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER *)lpBuffer)->bfOffBits; CClientDC dc(this); hShowBMP = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS); return hShowBMP; }

(2):顯示數(shù)據(jù)到控件

LPSTR m_buffer=NULL; CBitmap m_bmp; CRect rect; DIBSECTION ds;HBITMAP hbmp =BufferToHBITMAP(m_buffer); if( hbmp == NULL )return ; //該斷程序用來取得加載的BMP的信息// m_bmp.Attach( hbmp );BITMAPINFOHEADER &bminfo = ds.dsBmih; m_bmp.GetObject( sizeof(ds), &ds ); int cx=bminfo.biWidth; //得到圖像寬度 int cy=bminfo.biHeight; //得到圖像高度 /得到了圖像的寬度和高度后,我們就可以對圖像大小進行適應,即調整控件的大小,讓它正好顯示一張圖片///GetDlgItem(IDC_SHOWPIC2)->GetWindowRect(&rect); ScreenToClient(&rect); GetDlgItem(IDC_SHOWPIC2)->MoveWindow(rect.left,rect.top,cx,cy,true);//調整大小//IDC_SHOWPIC2為我的控件ID

(3):我的代碼實現(xiàn)!

void CAviTestDlg::BYTE2DC(BYTE* pArray, UINT ID) //void CAviTestDlg::BitMatToDC(cv::Mat img, UINT ID) { //if(img.empty())return; // 獲得顯示控件的 DC CDC *cdc = GetDlgItem( ID ) ->GetDC(); CDC MemDC;//首先定義一個顯示設備對象 CBitmap MemBitmap;//定義一個位圖對象// 獲取 HDC(設備句柄) 來進行繪圖操作 //HDC hDC = cdc ->GetSafeHdc();///pDC CRect rect; GetDlgItem(ID) ->GetClientRect( &rect ); Gdiplus::Bitmap bitmap(RGB_Width,RGB_Height,RGB_Width*3, PixelFormat24bppRGB, (BYTE*)pArray);//根據(jù)Mat矩陣創(chuàng)建一個GDI+中的Bitmap位圖,imageMD.FullYRes()* 3 //隨后建立與屏幕顯示兼容的內存顯示設備 MemDC.CreateCompatibleDC(cdc); //下面建立一個與屏幕顯示兼容的位圖,至于位圖的大小,可以用窗口的大小 MemBitmap.CreateCompatibleBitmap(cdc, rect.Width(), rect.Height()); //將位圖選入到內存顯示設備中 //只有選入了位圖的內存顯示設備才有地方繪圖,畫到指定的位圖上 CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap); //先用背景色將位圖清除干凈,可以用自己應該用的顏色 MemDC.FillSolidRect(0,0, rect.Width(), rect.Height(),RGB(0,255,255)); //繪圖 Gdiplus::Graphics g(MemDC.m_hDC); Gdiplus::Image *ii = &bitmap; g.DrawImage(ii, Gdiplus::Rect(0,0,rect.Width(),rect.Height())); g.ReleaseHDC(MemDC.m_hDC); //將內存中的圖拷貝到屏幕上進行顯 cdc->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0, 0,SRCCOPY); //繪圖完成后的清理 MemBitmap.DeleteObject(); MemDC.DeleteDC(); ReleaseDC(cdc); }

(4):微軟官方幫助:

CBitmap Class

封裝Windows圖形設備接口(GDI)位圖并提供成員函數(shù)操作位圖。

class CBitmap : public CGdiObject ?成員

公共構造函數(shù)

名稱

說明

CBitmap::CBitmap

構造?CBitmap?對象。

公共方法

名稱

說明

CBitmap::CreateBitmap

初始化具有指定的寬度、高度和位組合的設備相關的內存位圖的對象。

CBitmap::CreateBitmapIndirect

初始化位圖的對象與?BITMAP?結構(如果指定了)生成的寬度、高度和位組合。

CBitmap::CreateCompatibleBitmap

初始化使用位圖的對象,以使其與指定的設備兼容。

CBitmap::CreateDiscardableBitmap

初始化與指定的設備兼容的一discardable位圖的對象。

CBitmap::FromHandle

返回指向?CBitmap?對象,同時使處理Windows?HBITMAP?位圖。

CBitmap::GetBitmap

用有關位圖的信息來加載一?BITMAP?結構。

CBitmap::GetBitmapBits

復制指定的位圖的位到指定緩沖區(qū)。

CBitmap::GetBitmapDimension

返回位圖的寬度和高度。?該高度和寬度假定由?SetBitmapDimension?成員函數(shù)之前設置。

CBitmap::LoadBitmap

通過填寫命名位圖資源從應用程序的可執(zhí)行文件和附加位圖初始化對象到對象。

CBitmap::LoadMappedBitmap

加載位圖和映射顏色設置為當前系統(tǒng)顏色。

CBitmap::LoadOEMBitmap

通過加載預定義的Windows位圖和附加位圖初始化對象到對象。

CBitmap::SetBitmapBits

將位圖的位到指定的位值。

CBitmap::SetBitmapDimension

分配寬度和高度到0.1個單位的位圖。

公共運算符

名稱

說明

CBitmap::operator HBITMAP

返回Windows處理附加到?CBitmap?對象。



總結

以上是生活随笔為你收集整理的图形操作类CBitmap 把内存数据输出到PIC控件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。