【问题标题】:Color Bitmap file to Black and White彩色位图文件转黑白
【发布时间】:2013-05-24 02:57:37
【问题描述】:

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

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

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

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

另外,如果有导游的话,我很想去看看。

谢谢!

【问题讨论】:

    标签: c++ c bitmap


    【解决方案1】:

    分割用于在特定边界上对齐图像的每一行,在本例中为 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;
    }
    

    【讨论】:

    • 像素需要由4决定还是bit数量决定(24位图片)?
    • 这取决于图像的每一行在内存中的存储方式。有些库不会在每行的末尾添加填充,而其他库会这样做。您需要参考相应的文档来确定如何计算每条线和像素的大小。我提供的示例是通用的,用更具体的信息更新您的问题,我会适当地更新我的答案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多