diff Render.cpp @ 2131:651b24553ae9

savegame screenshot fix
author Ritor1
date Sat, 28 Dec 2013 16:49:21 +0600
parents 0d0aa7c1ccdd
children 49de109bbab5
line wrap: on
line diff
--- a/Render.cpp	Sat Dec 28 13:13:54 2013 +0600
+++ b/Render.cpp	Sat Dec 28 16:49:21 2013 +0600
@@ -2573,19 +2573,15 @@
 //----- (0049F5A2) --------------------------------------------------------
 void Render::PackPCXpicture( unsigned short* picture_data, int wight, int heidth, void *data_buff, int max_buff_size,unsigned int* packed_size )
 {
-  //Render *v7; // ebx@1
   void *v8; // esi@3
   void *v9; // esi@3
-  //int v10; // ecx@4
   unsigned short* v11; // eax@4
-  //int v12; // eax@6
   int v13; // eax@8
   int v14; // ecx@8
   signed int v15; // eax@11
   char v16; // zf@20
   int result; // eax@21
   char v18[58]; // [sp+Ch] [bp-ACh]@3
- // __int16 v19; // [sp+44h] [bp-74h]@3
   char v20[48]; // [sp+48h] [bp-70h]@3
   char *lineG; // [sp+78h] [bp-40h]@7
   char *lineB; // [sp+7Ch] [bp-3Ch]@7
@@ -2603,7 +2599,14 @@
   byte test_byte;
   unsigned char pict_byte;
 
-  //v7 = this;
+  int num_r_bits = 5;
+  int num_g_bits = 6;
+  int num_b_bits = 5;
+
+  int r_mask = 0xF800;
+  int g_mask = 0x7E0;
+  int b_mask = 0x1F;
+
   pitch = wight;
   if ( wight & 1 )
       pitch = wight + 1;
@@ -2661,7 +2664,6 @@
   lineRGB = (char*)malloc(3 * (wight + 2));
   if ( heidth > 0 )
   {
-    //v10 = pitch;
     v26 = 3 * pitch;
     v23 = 2 * wight;
     v11 = picture_data;
@@ -2675,10 +2677,10 @@
         lineB = (char *)lineRGB + 2 * pitch;
         for ( uint i = 0; i < wight; i++ )
         {
-          lineRGB[i] = (signed int)(this->uTargetRMask & *line_pictute_data) >> (this->uTargetGBits  + this->uTargetBBits  + this->uTargetRBits  - 8);
-          lineG[i] = (signed int)(this->uTargetGMask & *line_pictute_data) >> ( this->uTargetBBits + this->uTargetGBits- 8);
-          lineB[i] = (this->uTargetBMask & *line_pictute_data) << (8 - this->uTargetBBits);
-		  line_pictute_data += 2;
+          lineRGB[i] = (signed int)(r_mask & *line_pictute_data) >> (num_g_bits  + num_b_bits  + num_r_bits  - 8);
+          lineG[i] = (signed int)(g_mask & *line_pictute_data) >> ( num_b_bits + num_g_bits- 8);
+          lineB[i] = (b_mask & *line_pictute_data) << (8 - num_b_bits);
+          line_pictute_data += 1;
         }
       }
       for ( i = 0; i < v26; v9 = (char *)v9 + 1 )
@@ -2704,7 +2706,6 @@
         i += test_byte;
       }
       v11 += wight;
-      //v10 = pitch;
     }
   }
   free(lineRGB);
@@ -2714,19 +2715,15 @@
 //----- (0049F8B5) --------------------------------------------------------
 FILE *Render::SavePCXImage(const char *Filename, unsigned short* picture_data, int width, int height)
 {
-  //Render *v5; // esi@1
   FILE *result; // eax@1
   FILE *pOutFile; // edi@4
-  //int v8; // ecx@5
   unsigned short* v9; // eax@5
   int v10; // eax@7
-  //int v11; // ecx@9
   signed int v12; // eax@12
   char v13; // zf@21
   char v14[56]; // [sp+4h] [bp-A0h]@4
   __int16 v15; // [sp+3Ch] [bp-68h]@4
   char color_map[48]; // [sp+40h] [bp-64h]@4
-  int v17; // [sp+70h] [bp-34h]@5
   int v18; // [sp+74h] [bp-30h]@5
   char *v19; // [sp+78h] [bp-2Ch]@5
   int image_width; // [sp+7Ch] [bp-28h]@5
@@ -2791,15 +2788,10 @@
     fwrite(v14, 0x3Au, 1, pOutFile);
 
     lineRGB = (char *)malloc(3 * (width + 2));
-  //При сохранении изображения подряд идущие пиксели одинакового цвета объединяются и вместо указания цвета для каждого пикселя
-  //указывается цвет группы пикселей и их количество.
-    //if ( height > 0 )
-    //{
-    //v8 = pitch;
+    //При сохранении изображения подряд идущие пиксели одинакового цвета объединяются и вместо указания цвета для каждого пикселя
+    //указывается цвет группы пикселей и их количество.
     image_width = 3 * pitch;
-    v17 = 2 * width;
     v9 = picture_data;
-    //v19 = pPixels;
     for ( v18 = 0; v18 < height; v18++ )//столбец
     {
       line_pictute_data = v9;
@@ -2811,13 +2803,12 @@
         lineRGB[i] = (signed int)(r_mask & *line_pictute_data) >> (num_g_bits + num_b_bits + num_r_bits - 8);
         lineG[i] = (signed int)(g_mask & *line_pictute_data) >> (num_b_bits + num_g_bits - 8);
         lineB[i] = (b_mask & *line_pictute_data) << (8 - num_b_bits);
-        line_pictute_data += 2;
+        line_pictute_data += 1;
       }
       test_byte = 1;
-      for ( int i = 0; (signed int)i < image_width; i += test_byte )// += BYTE3(pPixels) )
+      for ( int i = 0; (signed int)i < image_width; i += test_byte )
       {
         unsigned char pic_byte = lineRGB[i];
-        //for ( BYTE3(pPixels) = 1; BYTE3(pPixels) < 0x3F; ++BYTE3(pPixels) )
          for ( test_byte; test_byte < 63; ++test_byte )// расчёт количества одинаковых цветов
         {
           v12 = i + test_byte;
@@ -2836,11 +2827,7 @@
         fwrite(&pic_byte, 1, 1, pOutFile);
       }
       v9 += width;
-      //v19 += v17;
-	  //pPixels += v17;
-      //v8 = pitch;
-    }
-    //}
+    }
     free(lineRGB);
     result = (FILE *)fclose(pOutFile);
   }