zoukankan      html  css  js  c++  java
  • cbitmap 获取RGB

    CBitMap的用法

     

    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;

  • 相关阅读:
    java1200_060_把数字格式化为货币字符串
    ccf_201712-02
    ccf_201712-01
    算法笔记-----单源最短路径之Bellman-Ford算法
    算法笔记-----贪心算法----加里比海盗船--最优装载问题
    算法笔记-----最优二叉搜索树
    SHTSC2017酱油记
    并不能来一发50AC
    【bzoj4514】: [Sdoi2016]数字配对 图论-费用流
    【bzoj1066】: [SCOI2007]蜥蜴 图论-最大流
  • 原文地址:https://www.cnblogs.com/chenzuoyou/p/3242444.html
Copyright © 2011-2022 走看看