我需要将彩色位图文件转换为黑白色。
据我所知,当我读取一行像素时,需要除以4.第一个问题,为什么? :)
如果它没有除以4,我需要添加零,直到它为止。
我遇到麻烦的主要问题是阅读那些零。谁能告诉我如何读取这些零?
此外,如果有任何指南,我很乐意看到它。
谢谢!
答案 0 :(得分:0)
除法用于在特定边界上对齐图像的每一行,在本例中为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;
}
答案 1 :(得分:0)
如果您只想将彩色图像转换为黑白而不执行低级操作,您可能需要查看ImageMagick(http://www.imagemagick.org/script/command-line-options.php#grayscale)。它有很多有用的实用程序。