<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    cbitmap 獲取RGB CBitMap的用法

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    MFC提供了位圖處理的基礎類CBitmap,可以完成位圖(bmp圖像)的創建、圖像數據的獲取等功能。雖然功能比較少,但是在對位圖進行一些簡單的處理時,CBitmap類還是可以勝任的。很多人可能會采用一些現成的CDib類進行位圖的讀取與處理,我覺得必要性不大。因為他們完成的功能差不多。

        以下假設定義了數據成員:

        CBitmap m_bitmap;

    (1) 位圖的讀取

    void LoadImage(CString fileName) { HBITMAP m_hBitmap;//位圖句柄 BITMAP bm;//存放位圖信息的結構

       m_hBitmap = (HBITMAP)::LoadImage(NULL,fileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);   //裝載位圖    if(m_bitmap.m_hObject)       m_bitmap.DeleteObject();    m_bitmap.Attach(m_hBitmap);//將句柄與CBitmap關聯起來    m_bitmap.GetBitmap(&bm);    height = bm.bmHeight;//圖像的寬高    width = bm.bmWidth;

    widthBytes=bm.bmWidthBytes;//圖像一行數據所占的字節數

    }

    (2) 位圖的顯示

    在OnDraw()或OnPaint()函數中調用:

    //dx0,dy0,dx,dy為顯示目標位置的坐標和大小,

    //sx0,sy0,sx,sy為圖像要顯示部分的起始坐標和大小

    void DrawImage(int dx0, int dy0, int dx, int dy, int sx0, int sy0, int sx, int sy)

    { if(!m_bitmap.m_hObject)    return;

    CClientDC dc(this);

    CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap* pbmpOld = memDC.SelectObject(&m_bitmap);

    dc.SetStretchBltMode(COLORONCOLOR);//設置拉伸模式,否則圖像會不清晰 dc.StretchBlt(dx0,dy0,dx,dy,&memDC,sx0,sy0,sx,sy,SRCCOPY);//繪制圖像 memDC.SelectObject(pbmpOld); memDC.DeleteDC();

    }

    (3) 位圖數據的獲取

    以灰度轉化為例:

    int size=height*widthBytes; BYTE *lpBits=new BYTE[size]; m_bitmap.GetBitmapBits(size,lpBits);//得到RGB數據

    BYTE *lpGray=new BYTE[height*width];

    int R, G, B;

    for(int i=0;i<height;i++)

       for(int j=0;j<width;j++)

       {

          B=lpBits[i*widthBytes+j*4];

          G=lpBits[i*widthBytes+j*4+1];

          R=lpBits[i*widthBytes+j*4+2];

          lpGray[i*width+j]=(B+G+R)/3;//轉化為灰度

       }

    ...

    delete []lpBits;

    delete []lpGray;

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全