afImage.cpp
上传用户:kaiguan
上传日期:2007-10-28
资源大小:1074k
文件大小:2k
源码类别:

其他游戏

开发平台:

Visual C++

  1. #include "afImage.h"
  2. #include "afLog.h"
  3. afImage::afImage() : data(NULL)
  4. {
  5. width = height = 0;
  6. format = UNKNOWN;
  7. }
  8. afImage::afImage(int nWidth, int nHeight, FORMAT nFormat, const afString& nName, unsigned char* nData, bool nCopy)
  9. {
  10. width = nWidth;
  11. height = nHeight;
  12. format = nFormat;
  13. name = nName;
  14. int size = width * height * getPixelSize();
  15. if(nData)
  16. {
  17. if(nCopy)
  18. {
  19. data = new unsigned char[size];
  20. memcpy(data, nData, size);
  21. }
  22. else
  23. data = nData;
  24. }
  25. else
  26. data = new unsigned char[size];
  27. }
  28. int
  29. afImage::getPixelSize() const
  30. {
  31. return getPixelSize(format);
  32. }
  33. int
  34. afImage::getPixelSize(FORMAT nFormat)
  35. {
  36. switch(nFormat)
  37. {
  38. default:
  39. case UNKNOWN:
  40. return 0;
  41. case A8:
  42. case P8:
  43. return 1;
  44. case RGB565:
  45. case XRGB1555:
  46. case ARGB1555:
  47. case ARGB4444:
  48. return 2;
  49. case RGB888:
  50. return 3;
  51. case ARGB8888:
  52. case XRGB8888:
  53. return 4;
  54. }
  55. }
  56. afString afImage::getFormatString(D3DFORMAT nFormat)
  57. {
  58. return getFormatString((FORMAT)nFormat);
  59. }
  60. afString afImage::getFormatString(FORMAT nFormat)
  61. {
  62. switch(nFormat)
  63. {
  64. default:
  65. case UNKNOWN:
  66. return "FORMAT-UNKNOWN";
  67. case A8:
  68. return "ALPHA-8";
  69. case P8:
  70. return "INDEXED-8";
  71. case RGB565:
  72. return "RGB-565";
  73. case XRGB1555:
  74. return "XRGB-1555";
  75. case ARGB1555:
  76. return "ARGB-1555";
  77. case ARGB4444:
  78. return "ARGB-4444";
  79. case RGB888:
  80. return "RGB-888";
  81. case ARGB8888:
  82. return "ARGB-8888";
  83. case XRGB8888:
  84. return "XRGB-8888";
  85. case DXT1:
  86. return "DXT1";
  87. case DXT2:
  88. return "DXT2";
  89. case DXT3:
  90. return "DXT3";
  91. case DXT4:
  92. return "DXT4";
  93. case DXT5:
  94. return "DXT5";
  95. case L8:
  96. return "LUMINANCE-8";
  97. }
  98. }
  99. bool afImage::isCompressed(FORMAT nFormat)
  100. {
  101. switch(nFormat)
  102. {
  103. case DXT1:
  104. case DXT2:
  105. case DXT3:
  106. case DXT4:
  107. case DXT5:
  108. return true;
  109. default:
  110. return false;
  111. }
  112. }
  113. bool afImage::hasAlpha(FORMAT nFormat)
  114. {
  115. switch(nFormat)
  116. {
  117. case ARGB8888:
  118. case ARGB1555:
  119. case ARGB4444:
  120. case A8:
  121. case DXT1:
  122. case DXT2:
  123. case DXT3:
  124. case DXT4:
  125. case DXT5:
  126. return true;
  127. default:
  128. return false;
  129. }
  130. }