在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 3635|回复: 7

[原创] 帮忙看看 灰度化C程序,有几行不懂

[复制链接]
发表于 2010-7-12 22:27:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 cjsb37 于 2013-4-29 09:02 编辑

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#pragma pack(1)
#define R 30
#define G 59
#define B 11
#define ONE 0
#define ZERO 255
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef long LONG;
typedef unsigned char BYTE;
typedef struct tagBITMAPFILEHEADER { // bmfh
WORD bfType; // 位图文件的类型,必须为BM
DWORD bfSize; // 位图文件的大小,以字节为单位
WORD bfReserved1; // 位图文件保留字,必须为0
WORD bfReserved2; // 位图文件保留字,必须为0
DWORD bfOffBits; // 位图数据的起始位置,以相对于位图文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{ // bmih
DWORD biSize; // 本结构所占用字节数
LONG biWidth; // 位图的宽度,以像素为单位
LONG biHeight; // 位图的高度,以像素为单位
WORD biPlanes; // 目标设备的级别,必须为1
WORD biBitCount;// 每个像素所需的位数,必须是1(双色),4(16色),8(256色)或24(真彩色)之一
DWORD biCompression; // 位图压缩类型,必须是 0(不压缩),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
DWORD biSizeImage; // 位图的大小,以字节为单位
LONG biXPelsPerMeter; // 位图水平分辨率,每米像素数
LONG biYPelsPerMeter; // 位图垂直分辨率,每米像素数
DWORD biClrUsed;// 位图实际使用的颜色表中的颜色数
DWORD biClrImportant;// 位图显示过程中重要的颜色数
} BITMAPINFOHEADER;
typedef struct tagPOINT{
BYTE b;
BYTE g;
BYTE r;
} POINT;
FILE *fi,*fo;//I/O file
char fin[80],fon[80];//I/O file name
BYTE buff,o=0;
BITMAPFILEHEADER bf;
BITMAPINFOHEADER bi;
POINT **p;
int i,j;
//////////////////
int t;
//////////////////
void bmpread()
{
if (((fi=fopen(fin,"rb"))==NULL)||((fo=fopen(fon,"wb"))==NULL))
{
  puts("\nfile open failed");
  return;
}
fread(&bf,sizeof(bf),1,fi); //读fileheader
fread(&bi,sizeof(bi),1,fi); //读infoheader
bf.bfSize=54+1024+bi.biWidth*bi.biHeight;
bf.bfOffBits=54+1024;

if(bi.biWidth%4==0)
  bi.biSizeImage=bi.biWidth*bi.biHeight*bi.biBitCount/8;
else
  bi.biSizeImage=(bi.biWidth-(bi.biWidth%4)+4)*bi.biHeight*bi.biBitCount/8;
bi.biBitCount=8;
p=(POINT **)malloc(sizeof(POINT *)*bi.biHeight);
for (i=0;i<bi.biHeight;i++)
*(p+i)=(POINT *)malloc(sizeof(POINT)*bi.biWidth);
//分配失败后果自负!
for (i=0;i<bi.biHeight;i++) //读RGB的值
  for (j=0;j<bi.biWidth;j++)
   fread(*(p+i)+j,sizeof(POINT),1,fi);
}
void bmpwrite()
{
fwrite(&bf,sizeof(bf),1,fo);
fwrite(&bi,sizeof(bi),1,fo);
for (i=0x00,buff=0x00;i<=0xFF;i++,buff++)
{
     fwrite(&buff,sizeof(buff),1,fo);//?????????????不懂
     fwrite(&buff,sizeof(buff),1,fo);//????????/????不懂
     fwrite(&buff,sizeof(buff),1,fo);//?????????????不懂
     fwrite(&o,sizeof(o),1,fo);      //?????????????不懂
}
for (i=0;i<bi.biHeight;i++)
  for (j=0;j<bi.biWidth;j++)
  {
   buff=((*(p+i)+j)->r*R+(*(p+i)+j)->g*G+(*(p+i)+j)->b*B)/100;
   ///////////////////////////////////////
       buff=(buff>=t?ONE:ZERO);
   ////////////////////////////////////////
   fwrite(&buff,sizeof(buff),1,fo);
  }
fclose(fo);
}
void main ()
{
  printf("orginfile name:");
  scanf("%s",fin);
  printf("resultfile name:");
  scanf("%s",fon);
  printf("theshold [0,255]:");
  scanf("%d",&t);
bmpread();
    bmpwrite();

}

/////////////////////////////////////////////////////////////////////////
     fwrite(&buff,sizeof(buff),1,fo);//?????????????不懂
     fwrite(&buff,sizeof(buff),1,fo);//????????/????不懂
     fwrite(&buff,sizeof(buff),1,fo);//?????????????不懂

为什么要连续对这个写入啊,删除一行就会出错





gray.rar

1.49 KB, 下载次数: 1 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2010-7-13 09:23:43 | 显示全部楼层
前辈们给指点一下
发表于 2010-7-18 19:00:37 | 显示全部楼层
qq群:102016911。FPGA.DSP,ARM等处理器的研发讨论,交流最新硬件发展行情,软硬件项目研发合作,辅导。承接各种电路设计,DSP FPGA ARM 软硬件辅导,价格合理,电路设计1000元起,辅导500元起,包会,我不在线时,项目交流或求助的打我电话,13649217057,非诚勿扰!
发表于 2010-10-9 21:39:26 | 显示全部楼层
往文件里面写执行后的数据
发表于 2010-10-11 00:22:38 | 显示全部楼层
fwrite函数,查一下C函数库就知道了,写文件吧
发表于 2010-10-21 17:50:58 | 显示全部楼层
THANKS
发表于 2011-3-20 02:38:21 | 显示全部楼层
fwrite函数,查一下C函数库就知道了
发表于 2021-9-22 15:34:05 | 显示全部楼层
感谢分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-21 01:44 , Processed in 0.042008 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表