Mercurial > mm7
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); }