GetInfoFun.cpp
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:3k
源码类别:

图形图象

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "PcxModule.h"
  3. #include "PcxDeclare.h"
  4. #define DIBSCANLINE_WIDTHBYTES(bits)    (((bits)+31)/32*4)
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. //#include "PcxModule.h"
  11. void Pcx_GET_FILE_INFO(INFOSTR *pInfo)
  12. {
  13. CFile file;
  14. CFileStatus status;
  15. PCXFILEHEADER PcxHeader;
  16. // DWORD dwSize;
  17. UINT uRet;
  18. // 检验入口参数是否符合接口定义
  19. ASSERT(pInfo->result == ER_EMPTY);
  20. ASSERT(::strlen(pInfo->filename));
  21. // 此时,该文件必需是一个已存在的、并且是有效的PCX文件
  22. ASSERT(pInfo->state == PKST_PASSVER);
  23. // 客户模块必需要先将imginfo清空为0
  24. ASSERT(pInfo->imginfo.imgtype == IMT_NULL);
  25. // 打开指定文件
  26. if (!file.Open(pInfo->filename, CFile::modeRead))
  27. {
  28. pInfo->result = ER_FILERWERR;
  29. return;
  30. }
  31. // 读取PCX的文件头结构
  32. file.SeekToBegin();
  33. uRet  = file.Read((LPSTR)&PcxHeader, sizeof(PcxHeader));
  34. if (uRet != sizeof(PcxHeader))
  35. {
  36. file.Close();
  37. pInfo->result = ER_FILERWERR;
  38. return;
  39. }
  40. // 读取图像信息数据
  41. LPIMAGEINFOSTR lpImgInfoStr = &pInfo->imginfo;
  42. // 获取文件的长度、图像的宽度、高度等信息
  43. lpImgInfoStr->imgtype = IMT_RESSTATIC;
  44. lpImgInfoStr->imgformat = IMF_PCX;
  45. lpImgInfoStr->filesize = file.GetLength();
  46. /*
  47. pInfo->wight = PcxHeader.wRight  - PcxHeader.wLeft + 1;
  48. pInfo->height = PcxHeader.wBottom - PcxHeader.wTop  + 1;
  49. pInfo->colorhight = PcxHeader.byBits*PcxHeader.byPlanes;
  50. */
  51. lpImgInfoStr->width = (DWORD) PcxHeader.wRight  - PcxHeader.wLeft + 1 ;
  52. lpImgInfoStr->height = (DWORD)PcxHeader.wBottom - PcxHeader.wTop  + 1 ;
  53. lpImgInfoStr->bitcount = (DWORD)PcxHeader.byBits*PcxHeader.byPlanes;
  54. // if(PcxHeader.biCompression==1)//Must
  55. lpImgInfoStr->compression = ICS_PCXRLE;
  56. // 每一图像行所占的字节数(DWORD对齐,表示位图解压后的有效值)
  57. lpImgInfoStr->linesize = DIBSCANLINE_WIDTHBYTES(lpImgInfoStr->width * lpImgInfoStr->bitcount );
  58. lpImgInfoStr->imgnumbers = 1; // PCX文件中只有一个图像
  59. lpImgInfoStr->imgchang = 0; // 表示可以被编辑
  60. // 获取文件最后的修改日期(月在高字节,日在低字节)
  61. file.GetStatus(status);
  62. lpImgInfoStr->year = (WORD)status.m_mtime.GetYear();
  63. lpImgInfoStr->monday = (WORD)status.m_mtime.GetMonth();
  64. lpImgInfoStr->monday <<= 8;
  65. lpImgInfoStr->monday |= (WORD)status.m_mtime.GetDay();
  66. // 获取文件最后的修改时间(字序:最高—0, 2—时,1—分,0—秒)
  67. lpImgInfoStr->time = status.m_mtime.GetHour();
  68. lpImgInfoStr->time <<= 8;
  69. lpImgInfoStr->time |= status.m_mtime.GetMinute();
  70. lpImgInfoStr->time <<= 8;
  71. lpImgInfoStr->time |= status.m_mtime.GetSecond();
  72. lpImgInfoStr->time &= 0xffffff;
  73. file.Close();
  74. // 设置出口数据
  75. pInfo->state = PKST_PASSINFO;
  76. pInfo->result = ER_SUCCESS;
  77. }