我需要将彩色位图文件转换为黑白。
我知道当我读取一行像素时,它需要除以 4。第一个问题,为什么?:)
如果它不除以 4,我需要添加零直到它除以。
我遇到的主要问题是阅读这些零。谁能告诉我如何阅读这些零?
此外,如果在任何地方都有指南,我很想看到它。
谢谢!
除法用于在特定边界上对齐图像的每一行,在本例中为 32 位。您可以使用模数学来确定每行末尾的额外字节数。
int zero_padding_count = image->actual_width_in_bytes % 4;
这将产生一个介于 0 和 3 之间的值。要进行处理,您可以执行以下操作。
char *source = image->buffer;
char *dest = some_buffer;
for(int row = 0; row < image->actual_height; row++)
{
for(int column = 0; column < image->actual_width_in_bytes; column++)
{
// do your conversion here
*source++ = dest++;
}
// Now adjust the source pointer for the number of padding bytes at the end
// of the line
source += zero_padding_count;
}
如果您只想将彩色图像转换为黑白而不执行低级操作,您可能需要查看 ImageMagick ( http://www.imagemagick.org/script/command-line-options.php#灰度)。它有很多有用的实用程序。