gpt4 book ai didi

c++ - 从 RGB BMP 创建灰度 BMP

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:02 28 4
gpt4 key购买 nike

我有 24 位图像,我读取位图并将其转换为灰度并像 8 位一样保存。

RGBTRIPLE temp;
unsigned char t;
...
t = (temp.rgbtBlue * 0.114 + temp.rgbtGreen * 0.587 + temp.rgbtRed * 0.299);
fwrite(&t, sizeof(UCHAR), 1, newFile);

在那个图像没有打开之后,我明白我必须在标题中进行更改。我尝试更改标题中的文件大小和位图大小,但它没有用。

BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
...
bfh.bfSize = sizeof(UCHAR) * img.Width * img.Height + bfh.bfOffBits;
bih.biSizeImage = sizeof(UCHAR) * img.Width * img.Height;
bih.biCompression = BI_BITFIELDS;
bih.biBitCount = 8;

保存图像如 8 位 BMP 我需要更改什么?

最佳答案

实际上,最简单的方法是不更改 header 中的任何内容。你读取 3 个值(RGB),使用标准的 PAL/NTSC 公式将它们转换为灰色,然后你可以将计算出的灰度值输出 3 次。这样,您将再次获得 1 个像素,但值已更改。

您仅仅更改标题是行不通的,因为对于 8 位、颜色索引 图像,您还需要提供颜色索引图 -- 调色板。此外,根据原始图像大小,您可能需要更改每行的步幅(这就是所谓的 - Google 也是您的 friend !)。

正如 Mark Setchell 所说,BI_BITFIELDS 不是您在这里需要的 (Wikipedia on BMP)。将 BI_RGB 用于真彩色或彩色索引图像;其他值非常专门化——而且我从未“在野外”见过它们。

关于c++ - 从 RGB BMP 创建灰度 BMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20480726/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com