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

Posted

技术标签:

【中文标题】C - 改变 bmp 文件的像素颜色【英文标题】:C - Changing pixel color of bmp file 【发布时间】:2018-03-09 00:15:25 【问题描述】:

我是 C 的新手,我一直在努力理解我应该如何访问和修改 bmp 文件的某些像素的 RGB 值。

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

所以我的问题是这样的:

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

谢谢。

【问题讨论】:

Windows 具有操作 BMP 文件的 API,您不必直接处理二进制文件...除非您愿意。 另外请记住,如果是 24 位 RGB 位图,像素仅以 3 个字节描述,还有其他格式。以单色为例,每个像素仅使用 1 位。 设置一个字节为0,只需写一个0。你不单独设置 8 位 【参考方案1】:
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 文件的像素颜色的主要内容,如果未能解决你的问题,请参考以下文章

1bpp 单色 BMP

用C语言读取16位bmp图片的每个像素的信息~

QT软件开发: 访问QImage每个像素点填充指定颜色

BMP 和 JPEG

提取bmp图片的颜色信息,可直接framebuffer显示

GetDIBits 遍历位图 获取像素的颜色值(RGB)