c语言读取jpg字节,给新手个教程吧,用控制台读取图片

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

我们在控制台不能讲RGB都画出来,只能选一个分量来画,就选红色分量来画吧。

还有一点就是,24位2位图储存的像素数据是上下颠倒的,如果你用顺序将文件像素读出来并画出的话就会发现图片上下颠倒了,我们需要注意这一点。还有一个要特别说明,控制台的横向最多能画80个字符,所以我们的位图图片的宽度必须设定为80!!

ok下面开始读取像素并画图

void main()

{

char pix,blank; //pix将存放我们读取出的红色分量数据,blank存放图片的背景颜色。我//们将用第一个读取出来的像素作为背景色,以后只要不是背景色的红色像素我们都画出来

int width,hight; //宽、高

FILE* pi;

pi=fopen("1.bmp","r");

if(pi==NULL) return;

fseek(pi,0x0012,SEEK_SET); //偏移0x0012个字节

fread(&width,sizeof(int),1,pi); //读取宽度

fread(&hight,sizeof(int),1,pi); //读取高度

if(width!=80) printf("图片宽度必须为80\n");

fseek(pi,54,SEEK_SET); //偏移54个字节以后后面就直接是赤裸裸的像素数据了,下面第//一个字节储存的就是第一个像素RGB的R

blank=fgetc(pi); //我们规定第一个读取出来的红色分量就是背景色

for(int i=0;i

{

/*

这里注意一下,因为我们的位图是上下颠倒的,所以第一行的像素在最后一行储存着呢

*/

fseek(pi,54,SEEK_SET); //跳回像素开头

fseek(pi,(hight-i-1)*3*80,SEEK_CUR); //跳过前hight-i-1行的数据

for(int j=0;j<80;++j) //循环宽

{

pix=fgetc(pi);

if(pix==blank) printf(" "); //如果像素为背景色,就画一个空格

else printf("%c",2); //反之画一个笑脸

//注意,我们读取完一个红色后还要跳过两个字节呢,RGB的GB我们不要了

fseek(pi,sizeof(char)*2,SEEK_CUR);

}

}

}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值