MFC根据颜色数组自定义位图并显示到窗口

本文介绍如何使用32位颜色表示法在一个100x100的二维数组中绘制一条蓝色对角线,同时将其他部分设置为黑色背景。通过具体的C++代码示例展示了如何创建和显示该位图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先颜色的定义,这里用32位即4个字节来表示1个颜色,从左到右数,第一个字节表示透明度,第二个字节是R,第三个字节是G,第四个字节是B。例0x000000ff表示蓝色。

定义100*100的二维数组,对角线赋值蓝色,其余为背景色黑色,即要在窗口中画一条对角线。

将二维数组按行传给DWORD *pbit32

DWORD *pbit32 = (DWORD *)malloc(100* 100 * sizeof(DWORD));
int k = 0;
for (size_t j = 0; j < 100; j++)
{
    for (size_t i = 0; i < 100; i++)
    {
        if (i == j)
            pbit32[k++] = 0x000000ff;

        else
            pbit32[k++] = 0x00000000;
    }
}

创建100*100的位图

CBitmap bmpDraw;
bmpDraw.CreateBitmap(100, 100, 1, 32, pbit32);

将100*100的位图显示到窗口中左上角坐标(0,0),宽和高均为100的区域中

GetDC()->BitBlt(0, 0, 100, 100, &memDC, 0, 0, SRCCOPY);

全部代码如下:

DWORD *pbit32 = (DWORD *)malloc(100* 100 * sizeof(DWORD));
int k = 0;
for (size_t j = 0; j < 100; j++)
{
    for (size_t i = 0; i < 100; i++)
    {
        if (i == j)
            pbit32[k++] = 0x000000ff;

        else
            pbit32[k++] = 0x00000000;
    }
}

CDC memDC;//定义一个兼容DC
memDC.CreateCompatibleDC(GetDC());//创建DC
CBitmap bmpDraw;
bmpDraw.CreateBitmap(100, 100, 1, 32, pbit32);//装入DDB
CBitmap* pbmpOld = memDC.SelectObject(&bmpDraw);
//保存原有DDB,并选入新DDB入DC
GetDC()->BitBlt(0, 0, 100, 100, &memDC, 0, 0, SRCCOPY);
//将源DC中(0,0,100,100)复制到目的DC(0,0,100,100)
memDC.SelectObject(pbmpOld);//选入原DDB

bmpDraw.DeleteObject();
memDC.SelectObject(pbmpOld);
memDC.DeleteDC();
free(pbit32);

注意:MFC中的RGB() 与这里的颜色表示不同,比如RGB(255,0,0) 表示红色,写成32位是0x000000ff ,在这里表示蓝色,所以写了个RGB到这里颜色的转换函数


DWORD RGB2DWORD(COLORREF colr)
{
    DWORD a = 0x000000ff;
    return ((colr&a) << 16) | (((colr >> 8)&a) << 8 )| ((colr >> 16)&a);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值