0

我需要将彩色位图文件转换为黑白。

我知道当我读取一行像素时,它需要除以 4。第一个问题,为什么?:)

如果它不除以 4,我需要添加零直到它除以。

我遇到的主要问题是阅读这些零。谁能告诉我如何阅读这些零?

此外,如果在任何地方都有指南,我很想看到它。

谢谢!

4

2 回答 2

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;
}
于 2013-05-23T18:30:53.387 回答
0

如果您只想将彩色图像转换为黑白而不执行低级操作,您可能需要查看 ImageMagick ( http://www.imagemagick.org/script/command-line-options.php#灰度)。它有很多有用的实用程序。

于 2013-05-23T18:57:37.803 回答