Chinaunix首页 | 论坛 | 博客
  • 博客访问: 20275
  • 博文数量: 14
  • 博客积分: 433
  • 博客等级: 下士
  • 技术积分: 145
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-16 23:07
文章分类

全部博文(14)

文章存档

2012年(14)

最近访客

分类: C/C++

2012-05-11 22:27:40


点击(此处)折叠或打开

http://blog.csdn.net/rwjlqn/article/details/4742314 !!!!!!!

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(){
  4.     FILE *fp1,*fp2;
  5.     unsigned int height,width;
  6.     unsigned char r,g,b,Y,U,V,temp;
  7.     width=height=0;
  8.     fp1=fopen("D:\\lena.bmp","rb");
  9.     fp2=fopen("D:\\my1.bmp","wb");
  10.     if(!fp1||!fp2)
  11.         exit(-1);
  12.     fseek(fp1,0,SEEK_END);
  13.     int flen=ftell(fp1);
  14.     fseek(fp1,0,0);
  15.     fseek(fp2,0,0);
  16.     unsigned char i;
  17.     for(int j=0;j<flen;j++){
  18.         fread(&i,sizeof(unsigned char),1,fp1);
  19.         if(j==18||j==19||j==20||j==21)
  20.             width=i*(1<<(8*(j-18)))+width;
  21.         if(j==22||j==23||j==24||j==25)
  22.             height=i*(1<<(8*(j-22)))+height;
  23.         //break;
  24.         //fwrite(&i,sizeof(unsigned char),1,fp2);
  25.     }
  26.     //printf("%u\n%u\n",width,height);
  27.     fseek(fp1,0,0);// from the beginning
  28.     for(int j=0;j<flen;j++){
  29.         if(j==54)
  30.             break;
  31.         fread(&i,sizeof(unsigned char),1,fp1);
  32.         fwrite(&i,sizeof(unsigned char),1,fp2);
  33.     }
  34.     for(unsigned int h=0;h<=height;h++)
  35.             for(unsigned int w=0;w<=width;w++){
  36.                 fread(&b,sizeof(unsigned char),1,fp1);
  37.                 fread(&g,sizeof(unsigned char),1,fp1);
  38.                 if(b==0&&g==0){
  39.                     temp=0;
  40.                     fwrite(&temp,sizeof(unsigned char),1,fp2);
  41.                     fwrite(&temp,sizeof(unsigned char),1,fp2);
  42.                     goto j;
  43.                 }
  44.                 fread(&r,sizeof(unsigned char),1,fp1);
  45.                 Y = (unsigned char)(0.3*r + 0.59*g + 0.11*b);
  46.                 U = (unsigned char)(0.493*(b-Y));
  47.                 V = (unsigned char)(0.877*(r-Y));
  48.                 //printf("%x,%x,%x\n",r,g,b);
  49.                 //printf("%x\n",Y);
  50.                 //goto mark;
  51.                 fwrite(&Y,sizeof(unsigned char),1,fp2);
  52.                 fwrite(&U,sizeof(unsigned char),1,fp2);
  53.                 fwrite(&V,sizeof(unsigned char),1,fp2);
  54. j:;
  55.         }
  56. //mark:    
  57.             //fread(&r,sizeof(unsigned char),1,fp1);
  58. //printf("%x\n",r);
  59.     fclose(fp1);
  60.     fclose(fp2);
  61.     return 0;
  62. }

阅读(372) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~