C - 更改 bmp 文件的像素颜色

标签 c binary bit-manipulation bmp

我对 C 还很陌生,我一直在努力理解应该如何访问和修改 bmp 文件的某些像素的 RGB 值。

我的图像的 header 以字节 54 结束,因此从那里开始,所有字节都应保存有关像素的信息。一个像素由 3 个字节定义,分别保存蓝色、绿色、红色(因为我的机器是小端)。我想让这个像素变成黑色,这意味着这 3 个字节的所有 8 位都需要为 0。

所以我的问题是这样的:

如何访问 bmp 文件的一个字节的位并将它们全部设置为零?

谢谢。

最佳答案

typedef uint8_t  BYTE;

typedef struct{
BYTE rgbtBlue;
BYTE rgbtGreen;
BYTE rgbtRed;
} __attribute__((__packed__))
RGBTRIPLE;

您可以定义一个名为RGBTRIPLE的结构体,并通过RGBTRIPLE.rgbtBlue命令访问其各个元素。(用于改变像素中蓝色的强度)

您知道 RGBTRIPLE 从字节 54 开始,因此您可以根据需要更改像素。请记住,每个 RGBTRIPLE 代表从屏幕右下角或左上角开始的每个像素(在您的 BMP. 头文件中指示),因为我们对您的 BMP 信息有限制。文件中,您可以通过将 BMP 文件头文件(前 54 位)中的规定信息与此链接中指示的信息进行匹配来检查自己的文件属性:

https://msdn.microsoft.com/en-us/library/dd183374(v=vs.85).aspx

祝你好运。

关于C - 更改 bmp 文件的像素颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49184649/

相关文章:

c++ - 安卓。是否可以在 C/C++ 上编写自定义函数并在 SQL 查询中使用它?

c# - 从二进制文件中随机读取结构

PHP函数标志,怎么样?

c++ - 使用按位运算符相乘

调用 printf 更改地址 C 传递的数组

在内核启动期间检查 ARM 是否处于管理模式或中断模式

c - 没有库函数的binaryToDecimal

python - 对字节进行按位运算

c - 如何检查打开的文件是否已被另一个进程移动或删除

C - 如果字 x 中的任何偶数位设置为 1,则返回 1