win32编成入门-位图

由于我需要做个显示二值化摄像头图像的上位机程序,因此用到了VC++中的位图,下面是这样使用的:

static BITMAP bitmap={0,24,8,4,1,1};  //定义位图,这个BITMAP是一个位图的数据结构

typedef struct tagBITMAP
  {
    LONG        bmType;  //类型,因为只传二值化图像,所以这里初始化1
    LONG        bmWidth;  //宽度,这里定义24
    LONG        bmHeight;  //高度,这里定义8
    LONG        bmWidthBytes;  //这个地方纠结了很久,它其实是一个计算方法,我们可以看到下面定义的bit中每一行有4个元素,因此定义为4,这个参数必须是2的倍数
    WORD        bmPlanes;  //颜色面数
    WORD        bmBitsPixel;  //图色位数,二值图就是1
    LPVOID      bmBits;
  } BITMAP


static BYTE bit[]={  0xFF,0,0,0,   //这里就是需要载入的位图信息,用16进制表示,前面定义参数24说明一行只取24个点,一个16进制byte表示8个点,所以一行前3个有效
                         0x0C,0,0,0,           //因为第4个参数必须是2的倍数,所以每行后面必须要再补一个0,数值8说明有8行
                         0x0C,0,0,0,
                         0x0C,0,0,0,
                         0xFF,0,0,0,
                         0xC0,0,0,0,
                         0xC0,0,0,0,
                         0xC0,0,0,0};


static HBITMAP hBitmap;   //定义位图句柄
HDC hdcMem;   //定义一个DC句柄作为缓冲区


case WM_CREATE:://在这个消息中加入如下

bitmap.bmBits=bit;   //其实每次需要更新图像都可以用这个

hBitmap=CreateBitmapIndirect(&bitmap);  //把位图信息标识得到句柄


case WM_PAINT://在这个消息中加入如下

hdcMem=CreateCompatibleDC(hdc);  //创建临时缓冲DC,与hdc兼容

SelectObject(hdcMem,hBitmap);  //选择位图画刷,相当于把位图当绘图工具

下面部分就是绘图,这里介绍几个函数:


BitBlt(hdc,0,0,100,100,hdcMem,0,0,SRCCOPY);    //将hdcMem里的从(0,0)开始的图传递给hdc中从(0,0)到(100,100)的地方

StretchBlt(hdc,0,0,100,100,hdcMem,0,0,24,8,SRCCOPY);  //将hdcMem里的从(0,0)开始,宽度24高度8的那一块拉伸使之匹配hdc中(0,0)到(100,100)的区域


DeleteDC(hdcMem);  //清楚缓存





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值