只适用于分辨率的长宽皆为4的倍数的jpg图像
所需知识:C语言
原图,仅学习用,如有侵权,请联系我,马上删除
![](https://i-blog.csdnimg.cn/blog_migrate/de510ba622ba5077d628a1ca49c69d4c.jpeg)
处理后
![](https://i-blog.csdnimg.cn/blog_migrate/af31e49ef3e30ae24bd763a0e99f7bb6.bmp)
bmp格式
先右键将图片转为bmp格式。
(仅对长宽皆为4的倍数的jpg图像成立)bmp格式下,前54字节为一些杂七杂八的头信息,我们需要用的图片数据本身在这54字节后。
众所周知图片由像素构成,每个像素又由RGB三层叠加而成,总之,只要知道R、G、B一个有一个字节大,所以,一个像素3个字节。故,图像信息大小=长*宽*3
要将彩色的像素变为灰色,只需:把一个像素里的RGB三个字节上的数据都改成RGB的均值——(R+B+G)/3,即可。(注意:RGB范围0-255,需要使用unsigned char而不是char
C语言文件读写
复习文件读写:文件指针打开文件-读取文件-文件指针复位到开头-写文件。
使用二进制文件读写函数fread, fwrite
注:二进制文件没有行的区别(即全在一行)
#include <stdio.h>
#define HEAD 54// 头部长度
#define WIDTH 960
#define HEIGHT 600
unsigned char buf[HEAD+WIDTH*HEIGHT*3+5];
int main() {
FILE* fp= fopen("..\\dog.bmp","rb+");
fread(buf,1,HEAD+WIDTH*HEIGHT*3,fp);
for (int i = HEAD; i < HEAD + WIDTH * HEIGHT * 3; i+=3) {
buf[i]=buf[i+1]=buf[i+2]=(buf[i]+buf[i+1]+buf[i+2])/3;
}
rewind(fp);// 文件指针复位文件开头
fwrite(buf,1,HEAD+WIDTH*HEIGHT*3,fp);
fclose(fp);
return 0;
}