CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

从打开的一副图象中读取灰度数据???

楼主sunsfq(沉默是金)2002-05-20 18:23:23 在 C/C++ / C语言 提问

从打开的一副图象中读取灰度数据?  
  涉及到那些函数,有没有从设备内存环境中把数据直接读到数组中的函数?? 问题点数:20、回复次数:1Top

1 楼Tranum(万漏阁主人)回复于 2002-05-20 20:21:09 得分 20

首先声明:我没太看懂你的意思   (1)如果是一个图像文件的话,既然打开了为何不知道如何读数据(如果不知道文件结构的话,我会在最后列出).(2)你说要从设备内春环境中直接读到数组中,你是咋把他弄到设备内春环境中的,糊涂了.  
   
  然后,下面是我的做法(打开文件-->读数据):  
            假设有图片a.bmp,256色灰度  
  unsigned   char   head[1078];//bmp图像文件头最大也就震大了  
  unsigned   char*   pfilehead=head;  
  unsigned   char*   pinfohead=head+sizeof(BITMAPFILEHEADER);  
  unsigned   char*   pImg;  
  CFile   cfile;  
  cfile.Open("a.bmp",CFile::modeRead,NULL);//打开文件  
  if(cfile.GetLengh()>54)//不可以比这小  
  {  
      cfile.Read(pfilehead,sizeof(BITMAPFILEHEADER));//读取结构BITMAPFILEHEADER  
      cfile.Read(pinfohead,sizeof(BITMAPINFOHEADER));//读取结构BITMAPINFOHEADER  
      if(0x424d!=*((WORD*)head))  
      {  
          AfxMessageBox("is   not   a   pic");//不是图片  
      }  
      else//是图片  
      {  
          int   big=((BITMAPFILEHEADER*)pinfohead)->biWidth   *   ((BITMAPFILEHEADER*)pinfohead)->biHeight;//宽*高=得到数据大小  
          pImg=new   unsigned   char[big];//分配内存  
          cfile.Seek(1078,CFile::begin);//256色灰度图像数据开始的位置  
          cfile.Read(pImg,bigf);//读  
          cfile.Close();//关闭  
          ////////////////////////////////////////////////////////////////  
          ///////////////////////好了,读到pImg里了,别忘了释放内存/////////  
          ////////////////////////////////////////////////////////////////  
      }  
  }  
  else  
  {  
      AfxMessageBox("is   not   a   pic");//不是图片  
  }  
   
  一些说明:  
                  在pImg中(bmp文件中)图像数据是以行为单位连秀存放的(从下到上从左到右),顺序是最后一行,   倒数第二行,倒数第三行......第二行,第一行.  
                  每一行都4字节取齐,不足补0(实际分辨率不变),填入的数据仅做占位的作用.  
                  bmp图像结构为:BITMAPFILEHEADER,BITMAPINFOHEADER,Palette(调色板),图像数据,四个部分.第一部分为14字节,第二部分40字节,调色板大小不固定,最后部分为宽*高*一个像素的字节数.  
                  上面程序仅针对256色灰度图像  
  下面是几个结构:  
  typedef   struct   tagBITMAPINFOHEADER{   //   bmih    
          DWORD     biSize;    
          LONG       biWidth;    
          LONG       biHeight;    
          WORD       biPlanes;    
          WORD       biBitCount    
          DWORD     biCompression;    
          DWORD     biSizeImage;    
          LONG       biXPelsPerMeter;    
          LONG       biYPelsPerMeter;    
          DWORD     biClrUsed;    
          DWORD     biClrImportant;    
  }   BITMAPINFOHEADER;    
     
  typedef   struct   tagBITMAPFILEHEADER   {   //   bmfh    
          WORD         bfType;    
          DWORD       bfSize;    
          WORD         bfReserved1;    
          WORD         bfReserved2;    
          DWORD       bfOffBits;    
  }   BITMAPFILEHEADER;    
     
  typedef   struct   tagRGBQUAD   {   //   rgbq    
          BYTE         rgbBlue;    
          BYTE         rgbGreen;    
          BYTE         rgbRed;    
          BYTE         rgbReserved;    
  }   RGBQUAD;   //调色版  
     
  最后,只有256色灰度图像数据每一字节代表一个灰度值,其余的都是一个索引值,要根据索引查调色版,然后根据RGB换算成灰度,24位色图像没有调色版,54字节的文件头后面直接是数据,三字节一个像素,顺序BGR,也需要换算出灰度  
   
  其余的,我还不明白你是啥意思呢,等我知道以上不是废话而且你需要再说吧Top

相关问题

  • 灰度图象和256 色图象有什么区别,灰度图象有调色板么?
  • 打开图象的问题!
  • 请问图象灰度是什么概念??
  • Drawdib如何显示256级灰度图象
  • 如何得到bmp图象的灰度直方图?
  • C++里面如何读取灰度图像的数据?
  • 如何显示12位灰度等级的图象,灰度图,跪求解决方案~·!!!!! 50分求助
  • 谁知道灰度级插值的算法?我是想放大一幅图象
  • 如何获取一幅黑白图象像素点的灰度值?
  • 高分求教:如何把灰度图象转成二值图像?在线等!

关键词

  • 数据
  • 文件
  • 灰度
  • pinfohead
  • 读取
  • cfile
  • bitmapfileheader
  • 打开
  • 设备
  • bmp

得分解答快速导航

  • 帖主:sunsfq
  • Tranum

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo