Marius '95
troubleShooter
Am nevoie de un pic de ajutor in descifrarea unei imagini comprimate.
Sirul de mai jos, dupa decomprimare ar trebui sa fie o imagine 128x128 alb-negru (1bit/pixel), deci 128x128=16384 pixeli a cate 1 bit, /8 biti = 2048 Bytes.
Eu am scris functia mea proprie in PHP, dar dintr-un motiv care imi scapa, marimea rezultatului variaza de la caz la caz in loc sa fie fix 2 KB.
Asadar, se da urmatorul sir ca exemplu:
Si se da functia:
Si se dau si explicatiile:
Poate cineva sa imi dea rezultatul functiei aleia sa il compar cu ce obtin eu?
Multumesc. Dau bere celui care decodeaza sirul si trece si prin Braila.
Sirul de mai jos, dupa decomprimare ar trebui sa fie o imagine 128x128 alb-negru (1bit/pixel), deci 128x128=16384 pixeli a cate 1 bit, /8 biti = 2048 Bytes.
Eu am scris functia mea proprie in PHP, dar dintr-un motiv care imi scapa, marimea rezultatului variaza de la caz la caz in loc sa fie fix 2 KB.
Asadar, se da urmatorul sir ca exemplu:
Code:
Z4f;21;Z2;1;Zb;4;Z3e;10;Z30;8;1;Z2f;1;Z19;4;Z5;1;Z1f;1;Z27;80;40;Z11;80;Z4;1;Z19;40;Z5;1;Zf;1;Z6;20;Z2;1;20;Z14;1;Z14;2;Z3;8;Z6;1;Z8;80;Zd;20;Zf;4;Z8;1;Zf;1;Z9;80;0;2;Z9;1;0;80;10;Z6;1;Zc;20;0;80;Z9;4;0;8;Z3;10;Zd;8;Z10;4;Zf;c;0;1;Z4;10;Z8;3;
;c8;Z7;4;Z4;10;40;10;0;1;Z4;2;Z8;94;Z6;2;Z2;1;Z2;8;20;Z2;80;81;Z4;4;Z7;80;12;0;81;Z4;2;Z4;1;Z2;40;34;80;1;Z7;22;Z3;21;23;41;cc;Z8;4;Z3;90;84;62;88;1;Za;40;a;3;21;0;1;Z6;80;Z4;9;4;15;40;Z8;40;Z2;c;22;f2;3f;18;2;Z4;2;Z4;8;b;ab;d6;32;dc;Z7;2;80;
;0;2;10;26;68;2c;24;Z6;22;Z4;1;95;5a;32;82;1;Z6;8;a0;0;2;21;1d;e5;b8;65;Z6;8;Z2;10;18;8d;8e;fe;58;a8;41;Za;1d;69;U1;8e;c0;80;Z5;20;Z4;f;fd;U1;de;c4;Za;10;2f;7f;af;U1;b0;Za;83;9d;ef;fe;ca;90;Z5;20;1;Z3;e;2f;df;7f;f6;40;1;Z3;8;20;0;10;Z2;a;7f;f7;
;U1;ef;a0;Z6;10;Z2;20;26;fa;U2;bf;10;1;Z3;20;Z5;3;U1;df;U1;dd;e0;Z5;4;Z3;1;76;f9;U2;ef;88;Z4;2;Z5;1e;b7;U2;fd;Z6;5;20;0;1;0;53;7f;fe;U1;d5;8;Z5;1;8;Z2;40;49;U3;f5;6a;Za;3f;U3;e4;90;Z5;80;Z4;6f;U3;fc;70;Z6;c;Z2;4;5f;U3;fb;28;Z4;1;4;Z4;7b;U3;ed;
;Z6;40;Z4;a7;U3;db;80;Z5;10;Z3;1;2b;U2;f6;dd;80;Z4;13;0;2;Z2;b;77;U2;ef;a8;Z5;22;Z2;10;2;d;7b;U2;f9;b4;80;Z4;1;0;12;40;8;11;bf;U2;bf;28;Z5;80;80;3;0;80;c4;7f;U2;fd;c0;Z4;30;40;Z2;1;2;49;7f;U3;a2;Z4;1;Z4;1;27;7f;fd;U1;f7;Z5;a;81;20;29;0;2;b;7f;
;U1;df;bf;98;Z7;80;0;10;a9;6f;U2;8a;Z5;3;0;40;Z2;80;5f;7f;U2;b0;Z5;2;0;4;0;14;40;86;U2;f6;e8;80;Z5;10;Z2;2;0;56;7f;fd;d9;60;Z8;16;8;6;82;f7;fe;be;88;Z5;4;10;4;0;55;2;4f;fd;U1;26;Z6;8;e0;0;83;4;10;15;U1;d6;fc;36;Z5;9;98;0;8;a8;10;2e;b1;5f;fc;4;
;0;2;Z3;4;40;0;1;62;40;c9;9c;69;50;0;8;Z4;8;41;84;Z2;40;11;f6;d9;0;10;Z5;4;Z3;26;0;39;ad;9a;2;50;Z2;80;Z3;8c;1;82;4;0;40;6;b7;80;1;Z5;2;40;0;18;1;e9;0;41;10;0;24;60;0;1;Z2;1;18;1;65;20;8;0;16;10;Z2;41;0;40;Z3;20;c;79;90;Z2;91;8;50;9c;a;80;Z3;42;
;12;0;40;0;40;5;1;80;40;84;0;48;4;Z2;20;0;5;8;45;a0;2;10;81;6;d0;85;40;Z4;4;80;38;62;Z3;89;ad;41;85;20;20;Z2;14;5;79;42;d0;50;10;1;e0;31;da;90;Z6;b6;2c;12;0;80;8;89;5f;38;50;Z4;4;10;14;20;60;Z2;9b;16;e7;3e;20;Z4;8c;1;10;44;5;48;0;e6;aa;bf;d1;
;28;2;20;Z2;20;0;3;1;0;1b;22;9;8f;e3;a;80;Z4;1;0;a5;14;8;8b;98;9f;f8;U1;29;Z5;10;0;20;8a;d3;f2;19;1e;fa;fb;32;1;Z4;20;1;2;7f;fb;bc;5;7d;d6;U1;f0;4;Z4;4;4a;6;5b;ef;f7;75;7b;f3;b3;30;Z5;a;9;48;U3;8f;f2;9f;1b;2;10;Z4;1;88;1f;U3;21;7f;a9;50;80;Z5;52;
;27;3f;U3;e5;79;ed;a0;40;Z5;5;41;3b;U3;f6;78;84;18;c0;Z6;1;7f;U3;c0;f4;5;0;20;80;Z5;28;f;U2;fa;bf;60;80;10;Z6;52;21;1f;U2;fe;40;48;14;Z7;4;2;f;U2;7e;48;Z9;10;2;7f;U1;fc;f9;0;c0;Z8;26;50;7b;U1;db;0;40;Z9;1;b0;2d;bf;d2;Zd;87;d3;48;Zd;b;0;40;Zd;8;
;Z4b;T
Si se da functia:
Code:
Example of compatible decompression function (Language C):
int UnSqueezeMatrix(unsigned char *pucDestMatrix, unsigned char *pucSrcM) // dest, src
{
int iCnt;
unsigned char *pucDest, *pucSrc, ucVal;
pucSrc = pucSrcM; // source
pucDest = pucDestMatrix; // dest
memset(pucDestMatrix, 0, sizeof(BMP_MATRIX)); // maz dest
while (*pucSrc != 'T') // end of trame
{
ucVal = *pucSrc;
switch(ucVal)
{
case '\x0d': // ignore CR , LF , separator
case '\x0a':
case ';':
break;
case 'U': // value 0xFF
{
pucSrc++;
sscanf((char *)pucSrc,"%x", &iCnt);
memset(pucDest, 0xFF, iCnt);
pucDest+= iCnt;
break;
}
case 'Z': // value 0
{
pucSrc++;
sscanf((char *)pucSrc,"%x", &iCnt);
memset(pucDest, 0x00, iCnt);
pucDest+= iCnt;
break;
}
default:
{
sscanf((char *)pucSrc,"%x", &iCnt);
*pucDest++ = (u_char)iCnt;
break;
}
}
while (*pucSrc != ';') // skip ; separator
pucSrc++;
pucSrc++;
}
return((int)pucDest - (int)pucDestMatrix);
}
This function needs that ";" is considered as a delimiter by the function scanf(), which is normally done in
most of the systems.
Si se dau si explicatiile:
Principle of the compression algorithm :
• The repetition of the byte 00 are coded "Zxxx", xxx = counter in ASCII Hexadecimal.
• The repetition of the byte FF are coded "Uxxx", xxx = counter in ASCII Hexadecimal.
• The other bytes are formatted in ASCII Hexadecimal: "xx".
• The end of the scattergram finshes with the character "T".
• Each item is separed by a delimiter ";".
• Before to reach 250 characters, a return [CR] is inserted.
Poate cineva sa imi dea rezultatul functiei aleia sa il compar cu ce obtin eu?
Multumesc. Dau bere celui care decodeaza sirul si trece si prin Braila.