我开始搞图像处理,想知道是否有一种方法可以在不使用图像处理库的情况下制作灰度图像,我知道前三位给出了有关图像、格式和大小的信息,从现在开始我想制作灰度图像
这是代码:
#include <stdio.h>
int main(){
FILE * binary = fopen("C:/Arabidopsis3.bmp", "rb");
FILE * bCopy=fopen("C:/copy.bmp","wb");
int get_char;
int i=3;
while ((get_char=fgetc(binary))!= EOF)
{
if(i>3)
{
doing the grayscale process
}
fputc(get_char, bCopy);
i++;
}
fclose(binary);
fclose(bCopy);
return 0;
}
如您所见,我将 bmp 复制到 copy.bmp 中,但 copy.bmp 应该是灰度的。 有什么建议吗?
最佳答案
首先,BMP 文件格式有一个被剥离的头文件(不在内存中)。在 header 之后,有一个固定大小的内存区域,但下一个区域有 7 种不同的格式: http://en.wikipedia.org/wiki/BMP_file_format
您必须确定格式,然后确定每个像素需要多少字节。然后您需要了解像素描述格式。
如果您只做一点研究,所有这一切都非常容易。我对文件格式不太了解,但如果您只了解其结构,您应该能够很容易地做到这一点。
编辑:
好吧,如果您知道每个像素值所在的位置,那么您应该能够通过使用指针沿着像素数组遍历来提取它们。例如,如果您知道图像中有 8 个像素,并且每个像素由 8 个字节定义,则可以使用 8 字节指针沿着像素数组遍历,方法是将 8 字节指针放置在像素数组部分的开头,然后做你的异或。我不知道如何制作灰度;我假设你只是摆脱了所有的颜色值。因此,如果第一个字节描述灰度,其余是颜色数据,您只需获取颜色数据并确保这些位设置为 0。
关于将BMP转换为灰度图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16487422/