| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1269 人关注过本帖
标题:关于bmp图像转灰度图求助!!
只看楼主 加入收藏
eurosky
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-6
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
关于bmp图像转灰度图求助!!
想把bmp图像转成灰度,去掉bmp格式的那些头文件等信息,只保留灰度值,存成一个数组,下面程序有错,请各位帮我看看怎么改,谢谢!
#include <stdio.h>
#include <windows.h>
int main()
{
 BITMAPFILEHEADER bmpfileheader;     //文件头
 BITMAPINFOHEADER bmpinfoheader;     //信息头

 BYTE *matrix1;                      //象素矩阵
 FILE *fp;                           //读取操作流
 FILE *store;                        //读出操作流

fp=fopen("gg.bmp","r+b");
 if (fp == NULL)
  printf("Open failed\n");
 else
  printf("Open Successsfully\n");

 fread(&bmpfileheader,sizeof(BITMAPFILEHEADER),1,fp);//读取文件头
 fread(&bmpinfoheader,sizeof(BITMAPINFOHEADER),1,fp);//读取信息头
 if (bmpinfoheader.biBitCount != 24)
  printf("The error picture!");
 else
  printf("The correct picture!");
 //以上无误


//这里开始报错
 matrix1 = new BYTE[bmpinfoheader.biSizeImage];
 memset(matrix1,0,bmpinfoheader.biSizeImage);

 fread(matrix1,1,bmpinfoheader.biSizeImage,fp);//读取象素矩阵

 fclose(fp);
unsigned long k;
 for(k=0;k<bmpinfoheader.biSizeImage;k=k+3)
 {
  *(matrix1+k)=*(matrix1+k+1)=*(matrix1+k+2)=(*(matrix1+k)+*(matrix1+k+1)+*(matrix1+k+2))/3;
 }

    //创建新的灰度图

 store=fopen("test.bmp","w+b");
 fwrite(&bmpfileheader,sizeof(BITMAPFILEHEADER),1,store);
 fwrite(&bmpinfoheader,sizeof(BITMAPINFOHEADER),1,store);

 fwrite(matrix1,1,bmpinfoheader.biSizeImage,store);
 fclose(store);

 int a;
 scanf("%d",&a);

 return 0;
}

[ 本帖最后由 eurosky 于 2010-6-6 09:30 编辑 ]
搜索更多相关主题的帖子: bmp 图像 
2010-06-06 06:28
NOMIPS
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:86
专家分:537
注 册:2010-3-31
收藏
得分:20 
C语言中不能用new啊,要用malloc
请参考,做了修改,测试24位图片OK!
程序代码:
#include <stdio.h>
#include <windows.h>
int main()
{
BITMAPFILEHEADER bmpfileheader;     //文件头
BITMAPINFOHEADER bmpinfoheader;     //信息头

BYTE *matrix1;                      //象素矩阵
FILE *fp;                           //读取操作流
FILE *store;                        //读出操作流
unsigned long k;
int a;

fp=fopen("gg.bmp","r+b");
if (fp == NULL)
  printf("Open failed\n");
else
  printf("Open Successsfully\n");

fread(&bmpfileheader,sizeof(BITMAPFILEHEADER),1,fp);//读取文件头
fread(&bmpinfoheader,sizeof(BITMAPINFOHEADER),1,fp);//读取信息头
if (bmpinfoheader.biBitCount != 24)
  printf("The error picture!\n");
else
  printf("The correct picture!\n");


//matrix1 = new BYTE[bmpinfoheader.biSizeImage];
matrix1 = (BYTE*)malloc(sizeof(BYTE)*bmpinfoheader.biSizeImage);

printf("bmpsize is %d:\n",bmpinfoheader.biSizeImage);

memset(matrix1,0,bmpinfoheader.biSizeImage);

//fseek(fp, 0x36, SEEK_SET);
fread(matrix1,1,bmpinfoheader.biSizeImage,fp);//读取象素矩阵

fclose(fp);

for(k=0;k<bmpinfoheader.biSizeImage;k=k+3)
{
  *(matrix1+k)=*(matrix1+k+1)=*(matrix1+k+2)=(*(matrix1+k)+*(matrix1+k+1)+*(matrix1+k+2))/3;
}

    //创建新的灰度图

store=fopen("test.bmp","w+b");
fwrite(&bmpfileheader,sizeof(BITMAPFILEHEADER),1,store);
fwrite(&bmpinfoheader,sizeof(BITMAPINFOHEADER),1,store);

fwrite(matrix1,1,bmpinfoheader.biSizeImage,store);

free(matrix1);

fclose(store);

scanf("%d",&a);

return 0;
}
2010-06-06 10:11
eurosky
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-6
收藏
得分:0 
很谢谢楼上!

其实我是想得到变成灰度值后的一个数组,里面是每个像素点的值,因为接下来要做DCT变换。


[ 本帖最后由 eurosky 于 2010-6-6 10:48 编辑 ]
2010-06-06 10:29
快速回复:关于bmp图像转灰度图求助!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038144 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved