LoadTGA.cpp
上传用户:owen_mei
上传日期:2022-08-09
资源大小:2263k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // LoadTGA.cpp: implementation of the CLoadTGA class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Billiard.h"
  6. #include "LoadTGA.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15. CLoadTGA::CLoadTGA()
  16. {
  17. }
  18. CLoadTGA::~CLoadTGA()
  19. {
  20. }
  21. //  下面函数的功能是将TGA文件中的数据读入到一个位图变量中
  22. unsigned char *CLoadTGA::LoadTGAFile( char * strFilename, tTGAHeader_s *header)
  23. {
  24. short BitsPerPixel;
  25. unsigned char *buffer;
  26. int bitsize; // 位图总的大小
  27. unsigned char *newbits;
  28. unsigned char *from, *to;
  29. int i, j, width;
  30.     FILE* file;
  31.     long dwWidth, dwHeight;
  32.     // 打开文件并读入文件头信息
  33. file = fopen( strFilename, "rb");
  34.     if( NULL == file )
  35.         return NULL;
  36.     if ( fread( header, sizeof( tTGAHeader_s ), 1, file ) != 1 )
  37.     {
  38.         fclose( file );
  39.         return NULL;
  40.     }
  41.     // 获得图像数据的大小
  42. dwWidth = (long)header->d_width;
  43. dwHeight = (long)header->d_height;
  44. BitsPerPixel = (short)header->d_pixel_size;          // 像素大小
  45.     // 创建一个装入图像数据的位图
  46. bitsize = dwWidth * dwHeight * (BitsPerPixel/8);
  47. if ((newbits = (unsigned char *)calloc(bitsize, 1)) == NULL)
  48. {
  49.         fclose( file );
  50.         return NULL;
  51. }
  52.   buffer = (unsigned char *)malloc(dwWidth*dwHeight*(BitsPerPixel / 8));
  53.     if ( fread( buffer, dwWidth*dwHeight*(BitsPerPixel / 8), 1, file ) != 1 )
  54. {
  55.         fclose( file );
  56. free(buffer);
  57. free(newbits);
  58.         return NULL;
  59. }
  60. width   = (BitsPerPixel / 8) * dwWidth;
  61.     for (i = 0; i < dwHeight; i ++)
  62. for (j = 0, from = ((unsigned char *)buffer) + i * width,
  63.         to = newbits + i * width;
  64. j < dwWidth;
  65. j ++, from += (BitsPerPixel / 8), to += (BitsPerPixel / 8))
  66.         {
  67. if (BitsPerPixel == 24)
  68. {
  69. to[0] = from[2];
  70. to[1] = from[1];
  71. to[2] = from[0];
  72. }
  73. else
  74. {
  75. to[0] = from[2];
  76. to[1] = from[1];
  77. to[2] = from[0];
  78. to[3] = from[3];
  79. }
  80.         };
  81. free(buffer);
  82.     fclose( file );
  83.     return newbits;
  84. }