MakeSkinView.cpp
上传用户:hkb425
上传日期:2007-06-16
资源大小:34191k
文件大小:6k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // MakeSkinView.cpp : implementation of the CMakeSkinView class
  2. //
  3. #include "stdafx.h"
  4. #include "MakeSkin.h"
  5. #include "MakeSkinDoc.h"
  6. #include "MakeSkinView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CMakeSkinView
  14. IMPLEMENT_DYNCREATE(CMakeSkinView, CView)
  15. BEGIN_MESSAGE_MAP(CMakeSkinView, CView)
  16. //{{AFX_MSG_MAP(CMakeSkinView)
  17. ON_WM_CREATE()
  18. //}}AFX_MSG_MAP
  19. END_MESSAGE_MAP()
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CMakeSkinView construction/destruction
  22. CMakeSkinView::CMakeSkinView()
  23. {
  24. // TODO: add construction code here
  25. strcpy(id,"Hunter3D00");
  26. version=1;
  27. }
  28. CMakeSkinView::~CMakeSkinView()
  29. {
  30. }
  31. BOOL CMakeSkinView::PreCreateWindow(CREATESTRUCT& cs)
  32. {
  33. // TODO: Modify the Window class or styles here by modifying
  34. //  the CREATESTRUCT cs
  35. return CView::PreCreateWindow(cs);
  36. }
  37. /////////////////////////////////////////////////////////////////////////////
  38. // CMakeSkinView drawing
  39. int CMakeSkinView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  40. {
  41. if (CView::OnCreate(lpCreateStruct) == -1)
  42. return -1;
  43. if(!ReadPicture())
  44. {
  45. MessageBox("Read pics error!");
  46. return -1;
  47. }
  48. if(!MakeTerSkin())
  49. {
  50. MessageBox("make skins error!");
  51. return -1;
  52. }
  53. return 0;
  54. }
  55. void CMakeSkinView::OnDraw(CDC* pDC)
  56. {
  57. CMakeSkinDoc* pDoc = GetDocument();
  58. ASSERT_VALID(pDoc);
  59. // TODO: add draw code for native data here
  60.     COLORREF color;
  61.     for(int z=0;z<256;z++)
  62.      for(int x=0;x<256;x++)
  63. {
  64.      color=RGB(baseA[z][x][2],baseA[z][x][1],baseA[z][x][0]);
  65.      pDC->SetPixel(x,z,color);
  66. }
  67. }
  68. bool CMakeSkinView::ReadPicture()
  69. {
  70. int x,z;
  71. FILE* file;
  72.     ////////////mask1
  73.     if((file= fopen("mask/mask1.bmp", "rb"))==NULL)
  74. return false;
  75. fseek(file,1078,SEEK_SET);
  76. for( z=255;z>-1;z--)
  77. for( x=0;x<256;x++)
  78. fread(&mask1[z][x],sizeof(unsigned char),1,file);
  79. if(fclose(file)!=0)
  80. return false;
  81. file=NULL;
  82.     ////////////mask2
  83.     if((file= fopen("mask/mask2.bmp", "rb"))==NULL)
  84. return false;
  85. fseek(file,1078,SEEK_SET);
  86. for( z=255;z>-1;z--)
  87. for( x=0;x<256;x++)
  88. fread(&mask2[z][x],sizeof(unsigned char),1,file);
  89. if(fclose(file)!=0)
  90. return false;
  91. file=NULL;
  92.     ////////////mask3
  93.     if((file= fopen("mask/mask3.bmp", "rb"))==NULL)
  94. return false;
  95. fseek(file,1078,SEEK_SET);
  96. for( z=255;z>-1;z--)
  97. for( x=0;x<256;x++)
  98. fread(&mask3[z][x],sizeof(unsigned char),1,file);
  99. if(fclose(file)!=0)
  100. return false;
  101. file=NULL;   
  102. ////////////////////BaseA
  103.     if((file= fopen("output/a1.bmp", "rb"))==NULL)
  104. return false;
  105. fseek(file,54,SEEK_SET);
  106. for( z=255;z>-1;z--)
  107. for( x=0;x<256;x++)
  108. fread(&baseA[z][x],sizeof(unsigned char),3,file);
  109. if(fclose(file)!=0)
  110. return false;
  111. file=NULL;   
  112. ////////////////////BaseB
  113.     if((file= fopen("output/b1.bmp", "rb"))==NULL)
  114. return false;
  115. fseek(file,54,SEEK_SET);
  116. for( z=255;z>-1;z--)
  117. for( x=0;x<256;x++)
  118. fread(&baseB[z][x],sizeof(unsigned char),3,file);
  119. if(fclose(file)!=0)
  120. return false;
  121. file=NULL;   
  122.     return true;
  123. }
  124. bool CMakeSkinView::MakeTerSkin()
  125. {
  126. FILE * OutFile;
  127. unsigned char blended;
  128. float factor;
  129. int x,z,i;
  130. ////////////write File TerSkin1A.skn
  131.     if((OutFile=fopen("OutPut/TerSkin1.skn","wb"))==NULL)
  132.     return false;
  133. fwrite(id,sizeof(char),10,OutFile);
  134. fwrite(&version,sizeof(char),1,OutFile);
  135.     /////////////////////////////////////////
  136.     for(z=255;z>-1;z--)
  137. for(x=0;x<256;x++)
  138. {
  139. factor=float(mask1[z][x])/255;
  140. for(i=0;i<3;i++)
  141. {
  142. blended=unsigned char(factor*baseA[z][x][2-i]+(1-factor)*baseB[z][x][2-i]);
  143.                 fwrite(&blended,sizeof(unsigned char),1,OutFile);
  144. }
  145. }
  146.     ///////////////////////
  147. fclose(OutFile);
  148. OutFile=NULL;
  149. ////////////write File TerSkin1B.skn
  150.     if((OutFile=fopen("OutPut/TerSkin2.skn","wb"))==NULL)
  151.     return false;
  152. fwrite(id,sizeof(char),10,OutFile);
  153. fwrite(&version,sizeof(char),1,OutFile);
  154.     /////////////////////////////////////////
  155.     for(z=255;z>-1;z--)
  156. for(x=0;x<256;x++)
  157. {
  158. factor=1-float(mask1[z][x])/256;
  159. for(i=0;i<3;i++)
  160. {
  161. blended=unsigned char(factor*baseA[z][x][2-i]+(1-factor)*baseB[z][x][2-i]);
  162.                 fwrite(&blended,sizeof(unsigned char),1,OutFile);
  163. }
  164. }
  165.     ///////////////////////
  166. fclose(OutFile);
  167. OutFile=NULL;
  168. ////////////write File TerSkin2.skn
  169.     if((OutFile=fopen("OutPut/TerSkin3.skn","wb"))==NULL)
  170.     return false;
  171. fwrite(id,sizeof(char),10,OutFile);
  172. fwrite(&version,sizeof(char),1,OutFile);
  173.     /////////////////////////////////////////
  174.     for(z=255;z>-1;z--)
  175. for(x=0;x<256;x++)
  176. {
  177. factor=float(mask2[z][x])/256;
  178. for(i=0;i<3;i++)
  179. {
  180. blended=unsigned char(factor*baseA[z][x][2-i]+(1-factor)*baseB[z][x][2-i]);
  181.                 fwrite(&blended,sizeof(unsigned char),1,OutFile);
  182. }
  183. }
  184.     ///////////////////////
  185. fclose(OutFile);
  186. OutFile=NULL;
  187. ////////////write File TerSkin3A.skn
  188.     if((OutFile=fopen("OutPut/TerSkin4.skn","wb"))==NULL)
  189.     return false;
  190. fwrite(id,sizeof(char),10,OutFile);
  191. fwrite(&version,sizeof(char),1,OutFile);
  192.     /////////////////////////////////////////
  193.     for(z=255;z>-1;z--)
  194. for(x=0;x<256;x++)
  195. {
  196. factor=float(mask3[z][x])/256;
  197. for(i=0;i<3;i++)
  198. {
  199. blended=unsigned char(factor*baseA[z][x][2-i]+(1-factor)*baseB[z][x][2-i]);
  200.                 fwrite(&blended,sizeof(unsigned char),1,OutFile);
  201. }
  202. }
  203.     ///////////////////////
  204. fclose(OutFile);
  205. OutFile=NULL;
  206.     return true;
  207. }
  208. /////////////////////////////////////////////////////////////////////////////
  209. // CMakeSkinView diagnostics
  210. #ifdef _DEBUG
  211. void CMakeSkinView::AssertValid() const
  212. {
  213. CView::AssertValid();
  214. }
  215. void CMakeSkinView::Dump(CDumpContext& dc) const
  216. {
  217. CView::Dump(dc);
  218. }
  219. CMakeSkinDoc* CMakeSkinView::GetDocument() // non-debug version is inline
  220. {
  221. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMakeSkinDoc)));
  222. return (CMakeSkinDoc*)m_pDocument;
  223. }
  224. #endif //_DEBUG
  225. /////////////////////////////////////////////////////////////////////////////
  226. // CMakeSkinView message handlers