Besoin de traduction de routine en visual C++

cs_nandofive Messages postés 35 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 22 avril 2009 - 28 févr. 2004 à 22:45
cs_nandofive Messages postés 35 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 22 avril 2009 - 29 févr. 2004 à 16:12
Voila j' ai obtenue la routine de décompression de fichier BMP mais on me la fourni en visual C++

Si certaine personnes peuvent m' aider a la traduire en visual basic merci

code:--------------------------------------------------------------------------------
BOOL CWECompress::_DeCompress(BYTE **BufDest, BYTE *BufSrc)
{
BYTE *ptrRes = *BufDest;

LONG k3;
ULONG i,j;
BYTE k,k2;

i = 0;

while (TRUE)
{
if ((i & 0x100) == 0) // (i < 0x100) or (0x1000 0x80 il controllo passa
// Caso in cui abbiamo 1 solo byte per il comando, // nbit move 4, nbitrepeat 4
{
BufSrc++;// add pointer

if ((k2 & 0x40) != 0) // k2 & 0x40 != 0 Solo se k2 > 0xC0 il controllo passa
{
// blocco per copiare i bytes in plain mode// nrepeatmax 0xFE-0xB9 69 7 bit// nrepeatmin 0xC0-0xB9 7
k k2 & 0xFF;// k k2 & 0xFFk3 k - 0xB9;// k3 k - 0xB9 k3 = numero ottenuto sottraendo k2 fatto passare
if (k == 0xFF)
break; // esci dal ciclo

// ciclo che copia i k3 bytes in plain mode
while(k3-- >= 0) //sicuramente k3 > 0
{
k2 = *BufSrc & 0xFF;// get data
BufSrc++;// add pointer
ptrRes++;// add pointer
*(ptrRes - 1) = (BYTE) k2; // write k2 on ptrRes

}

i = i >> 1;// i SHR 1
continue;
}

// questo j mi dirà quanto dovrò spostarmi indietro per ripetere k3+1 volte il
// ciclo (max 16)// max j 16, k3 4 con BFj (k2 & 0x0F) + 1;// k2 & 0x0F prendo gli ultimi 4 bit e sommo 1 k3 (k2 >> 4) - 7;// k2 >> 4 tolgo gli ultimi 4 bit,e tolgo 7;
// k3 mi dice quante volte devo ripetere il byte + 1 volta del ciclo + 1 messa in precedenza// es. 90 -> j 1 [1 byte indietro], k3 90 >> 4 - 7 = 9 - 7 = 2
// -> 2 + 1 + 1 = 4 volte

}
else
{
// 2 bytes per il comando tipo 24 01// nbit move 14, nbitrepeat 6

j = *(BufSrc + 1) & 0xFF;// get data (prendi il byte successivo)
BufSrc += 2;// add pointer by 2k3 (k2 >> 2) + 2;// k3 togli ultimi 2 bit + 2 (24 = 11 volte infatti)j j | (k2 & 3) << 8;// j j | (k2 & 3)*256// max j 1024, k3 33 con 7F FF
// numero di bytes da arretrare per poi scrivere k3 volte i bytes ritrovati// es 24 01 -> j 01 | (24 & 3) << 8 1 | 0 = 1, k3 = 24 >> 2 + 2 = 9 + 2 = 11
// -> 11 + 1 + 1 = 13 volte
}

// ciclo per ripetere k3 volte + 1 il byte a partire dalla posizione -j
for ( ; k3>=0; k3--) // loop until k3>=0
{
*ptrRes = *(ptrRes - j) & 0xFF;// write data from first (far j bytes) for k3 times
ptrRes++;

};

}

i = i >> 1;

}

return TRUE;
}

PS : Peut on déduire de cette routine la routine de compréssion merci.

2 réponses

cs_nandofive Messages postés 35 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 22 avril 2009
29 févr. 2004 à 00:58
Je précise bien aidé . Mon intention n' est pas de le faire faire par quelqu' un d' autre.

PS : Je n' est pas les bases suffisantes pour y arrivé seul.

Merci
0
cs_nandofive Messages postés 35 Date d'inscription vendredi 3 janvier 2003 Statut Membre Dernière intervention 22 avril 2009
29 févr. 2004 à 16:12
C' est bon mon problème est résolu. J' ai compilé ce code dans une dll avec Builder C++.

Merci qd même.
0
Rejoignez-nous