CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  图形图像/机器视觉

读取tga格式的图片并试图取得其HBITMAP,但可耻的失败鸟,达人请入

楼主SpacePirate(空间大盗)2005-02-04 16:52:46 在 专题开发/技术/项目 / 图形图像/机器视觉 提问

读取tga格式的图片并试图取得其HBITMAP,但可耻的失败鸟,达人请入  
   
  我的做法如下:  
   
  //   先建一个结构体存放信息头  
   
  #pragma   pack(push)  
  #pragma   pack(1)  
  typedef   struct   TAG_FILE_HEAD_TYP  
  {  
  BYTE   m_bImageInfo;   //   图象信息字段  
  BYTE   m_bColorsetStyle;   //   颜色表类型  
  BYTE   m_bImageStyle;   //   图象信息码  
   
  //   颜色表规格  
  WORD   m_wColorsetFirstAddress;   //   颜色表首地址  
  WORD   m_wColorsetSize;   //   颜色表长度  
  BYTE   m_bColorsetBit;   //   颜色表表项的位(bit)数  
   
  WORD   m_wPosX;   //   图象左下角X坐标的起始位置  
  WORD   m_wPosY;   //   图象左下脚Y坐标的起始位置  
   
          WORD   m_wWidth;   //   图象宽度  
  WORD   m_wHeight;   //   图象高度  
   
  BYTE   m_bBitsPerPixel;   //   图象每象素占用位数  
  BYTE   m_bImageDescription;   //   图象描述符字节  
   
  //BYTE*   m_pwPixel;   //   图象数据区  
  }   TGAFileHead,   *TGAFileHeadPtr;  
   
   
  //   。。。  
  //   取得头部信息之后  
   
  HDC   hDC   =   CreateCompatibleDC   (   dc   );   //   dc   是传入的paintdc  
  LPBYTE   pBits;  
  BITMAPINFO   BitInfo;  
   
  //   申请内存空间  
  pBits=(BYTE*)   malloc((int)tga->m_wWidth*(int)tga->m_wHeight*(int)(tga->m_bBitsPerPixel   >>   3));  
  memset(&BitInfo,0,sizeof(BITMAPINFO));  
   
  BitInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);  
  BitInfo.bmiHeader.biWidth=(int)tga->m_wWidth;  
  BitInfo.bmiHeader.biHeight=(int)tga->m_wHeight;  
  BitInfo.bmiHeader.biPlanes=1;  
  BitInfo.bmiHeader.biBitCount=   tga->m_bBitsPerPixel;  
  BitInfo.bmiHeader.biCompression=0;  
   
  _lread(fileHandle,   pBits,   (int)tga->m_wWidth   *   (int)tga->m_wHeight   *   (int)(tga->m_bBitsPerPixel   >>   3));  
   
  HBITMAP   hb;  
  hb   =   CreateDIBitmap(hDC,   &BitInfo.bmiHeader,   CBM_INIT,  
  pc,   &BitInfo,   DIB_RGB_COLORS);  
   
  DWORD   err   =   GetLastError();  
  ASSERT(hb);  
   
  //   在调试中用*(pBits   +   n),n是从0开始一个个查看,发现读入的象素点都是正确的,  
  //   我拿来做试验的tga图片格式信息是02,每个象素点是用4字节表示的,长宽都是64  
  //   头信息读取和我用ultraedit查看的二进制文件也完全吻合  
   
  //   但是贴出来的图是一片黑漆漆  
  if(hb)  
  {    
  HBITMAP   OldHBitmapforCell   =   (HBITMAP)MemDC.SelectObject(hb);  
  MemDCMain.BitBlt(0,   0,    
  64,   64,  
  &MemDC,   0,   0,   SRCCOPY);  
  MemDC.SelectObject(OldHBitmapforCell);  
  }  
   
   
  bow!!!谁能告诉我为什么啊,为什么贴出来的图是全黑的;  
  取得HBITMAP的方法是不是只有createdibitmap   或者createdibsection,我都试过了啊,还是一样黑 问题点数:0、回复次数:1Top

1 楼Diab1o(菠萝)回复于 2005-02-11 21:56:52 得分 0

hb   =   CreateDIBitmap(hDC,   &BitInfo.bmiHeader,   CBM_INIT,  
  pc,   &BitInfo,   DIB_RGB_COLORS);  
  这句的倒数第二个参数应该是pBits吧Top

相关问题

  • 如何使用GetDIBits读取HBITMAP中象素值
  • 如何读取特定格式数字图像,如tga格式
  • 求32位TGA RGBA文件的读取代码,谢谢
  • 文件读取?
  • 读取文件?
  • 读取数据
  • 如何读取
  • session 读取(C#)
  • DLL的读取
  • 文件读取~

关键词

  • word
  • 信息
  • bitinfo
  • tga
  • 图象
  • bmiheader
  • bbitsperpixel
  • wheight
  • wwidth
  • pbits

得分解答快速导航

  • 帖主:SpacePirate

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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