MFC如何将一个unsigned int数组转换为bitmap?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC如何将一个unsigned int数组转换为bitmap?相关的知识,希望对你有一定的参考价值。

求具体方法,谢谢大大们了喵。

参考技术A CBitmap::SetBitmapBits
DWORD
SetBitmapBits(
DWORD
dwCount,
const
void*
lpBits
);
返回值:调用成功时返回设置位图位值的字节数,否则为0。
参数:
dwCount
指定由lpBits指向的字节数。
lpBits
指向一个BYTE类型的数组,数组中记录了要拷贝到CBitmap对象的位值。
说明:本函数用lpBits指定的位值设置位图的位值。

如何将 C unsigned int 中的底部 n 位清零?

【中文标题】如何将 C unsigned int 中的底部 n 位清零?【英文标题】:How to zero out bottom n bits in a C unsigned int? 【发布时间】:2013-02-10 06:54:07 【问题描述】:

我正在尝试编写自己的 C 楼函数。我被困在这个代码细节上。我只想知道如何将 unsigned int 的底部 n 位归零。

例如,要将 51.5 舍入到 51.0,我需要将底部 18 位归零,并保留前 14 位。由于它是一个底函数,我想制作一个掩码以将底部归零(23 减去指数)来自浮点表示的位。我知道如何为这样的个别情况制作面具,但我不确定如何对其进行编码以使其适用于所有人。请帮忙。

【问题讨论】:

int floor(float number) return (int)number; 工作 下定决心 - 数字和无符号是短的还是浮点数?你试过什么? 抱歉,刚刚编辑。该数字是一个无符号整数 我正在尝试将 unsigned int 的底部位归零。 我已经做了一些例子。要将 51.5 舍入到 51.0,我需要保留数字的前 14 位。所以我会做数字和FFF20000。但由于每次都会有所不同,我不确定如何编写适合所有人的东西。 【参考方案1】:

一个更简单的方法就是这样做:

value = (value >> bits) << bits

因为左移会用零填充它,而不是其中的任何内容。

【讨论】:

我特别喜欢这个。非常优雅。 非常感谢你们!! 对不起,你能解释一下这里的比特和价值吗?在我试图保留前 14 位的示例中,掩码是否应该是这样的: value = (value >> 14) 【参考方案2】:

将一个数字左移 N 位。减一。反转位。还有你需要屏蔽的号码。

1 << 14 = 00000000000000000010000000000000
     -1 = 00000000000000000001111111111111
     ~  = 11111111111111111110000000000000

当你and 时,掩码中的 1 将保留输入,掩码中的 0 会将结果设置为 0。

【讨论】:

以上是关于MFC如何将一个unsigned int数组转换为bitmap?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 unsigned long long int 转换为 unsigned char*?

DWORD类型

如何将 unsigned char* 转换为 unsigned long long int?

如何将unsigned char 转化为int

如何将 C unsigned int 中的底部 n 位清零?

MFC随机数