Page 1 sur 2
Traduction de code C++
Publié : sam. 06/oct./2007 15:41
par Progi1984
Je cherche à traduire deux codes C++ en PB. Mais je n'y arrive pas... Vu que ma connaissance du C++ n'est qu'assez rudimentaire.... Mercide votre aide.
Code : Tout sélectionner
if(FreeImage_GetBPP(clone) == 8)
{
for(y = 0; y < FreeImage_GetHeight(clone); y++)
{
BYTE *bits = (BYTE *)FreeImage_GetScanLine(clone, y);
for(x = 0; x < FreeImage_GetWidth(clone); x++)
{
if(bits[x] != 128)
throw(1);
}
}
}
Code : Tout sélectionner
// create a zone plate
for(i = height, y = -cY; i--; y++)
{
BYTE *dst_bits = FreeImage_GetScanLine(dst, i);
for (j = width, x = -cX; j--; x++)
{
d = ((x * x + y * y) * scale) >> 8;
dst_bits[j] = sinTab[d & 0xFF];
}
}
Publié : sam. 06/oct./2007 15:52
par Ollivier
T'es chaud toi! Pas d'en-tête, rien! Qu'est-ce que tu veux au fond?
Publié : sam. 06/oct./2007 16:27
par Progi1984
traduire ces codes en PB
Mais je bloque sur différents points :
- sur ce qui semble être des doubles for, mais je n'ai jamais vu ca avant
- BYTE *bits = (BYTE *)FreeImage_GetScanLine(clone, y);... Après cela, on utilise Bits en tableau alors qu'il est déclaré en BYTE.
Publié : sam. 06/oct./2007 16:43
par Ollivier
Quand il y a du C sur msdn, tu as les déclarations tout ça, donc je me repère, mais là il y a des fonctions, que je n'y compris rien.
En gros, il te lit une image octet par octet et puis fait une vérif sur chaque octet lu, mais tu ne mets pas la fonction throw, rien! Donc c'est un peu vague (beaucoup, surtout pour une burne comme moi).
Publié : sam. 06/oct./2007 16:46
par Progi1984
Ah, c'est ca que tu veux... cela vient des exemples fournis avec FreeImage.
Ce n'est pas tellement les fonctions que je veux traduire mais plutot la syntaxe C++.
Publié : sam. 06/oct./2007 17:02
par tmyke
Code : Tout sélectionner
If(FreeImage_GetBPP(clone) = 8)
For y = 0 To FreeImage_GetHeight(clone)-1
*bits = FreeImage_GetScanLine(clone, y)
For x = 0 To FreeImage_GetWidth(clone)-1
If(bits(x) <> 128)
throw(1)
EndIf
Next
Next
EndIf
j'te traduit l'autre dans les 30 mn ...

Publié : sam. 06/oct./2007 17:04
par Chris
tmyke a écrit :j'te traduit cela dans les 30 mn ...
et moi, dans 30.... ans

Publié : sam. 06/oct./2007 17:29
par tmyke
ça y est, la belle doche est partie (hoouufff).
voici pour moi la traduction du second code:
Code : Tout sélectionner
y = -cY
For i = height To 0 step -1
*dst_bits = FreeImage_GetScanLine(dst, i)
x=-cX
For j = width To 0 step -1
d = ((x * x + y * y) * scale) >> 8
dst_bits(j) = sinTab[d & $FF];
x+1
Next
y+1
Next
Publié : sam. 06/oct./2007 17:33
par Progi1984
Merci à tt le monde de m'avoir aidé... Je teste ca dès que possible.
ReMerci TMyke. Content de te revoir

Publié : dim. 07/oct./2007 11:06
par Ar-S
tmyke a écrit :ça y est, la belle doche est partie (hoouufff).
Une des meilleurs motivations pour retourner à ses lignes de codes

Publié : dim. 07/oct./2007 11:22
par tmyke
Ouai, et si en plus elle avait les meme yeux que toi, elle me foutrais
définitivement les jetons...

Publié : dim. 07/oct./2007 14:54
par Dr. Dri
Progi1984 a écrit :traduire ces codes en PB
Mais je bloque sur différents points :
- sur ce qui semble être des doubles for, mais je n'ai jamais vu ca avant
- BYTE *bits = (BYTE *)FreeImage_GetScanLine(clone, y);... Après cela, on utilise Bits en tableau alors qu'il est déclaré en BYTE.
c'est parce que les pointeurs sont assimilés à des tableaux
@tmyke
je pense pas (à vue de nez) que ton code soit bon
Dri
Publié : dim. 07/oct./2007 15:33
par tmyke
Heu c'est fort possible, mais dis moi ou ?
Sinon, BYTE *bits signifie que tu déclare un pointeur de type BYTE (unsigned char).
en suite, en C++, tu peux ecrire/lire pour avoir accès au élément de la zone
comme dans un tableau une syntaxe bits[n], ou tu obtiens le n ième élément
de la zone pointé (élément au format BYTE bien sur, équivalent du type .c en
PB).
Par contre, je n'ai pas traduit en PB l'accès au tableau à partir du pointeur, mais Progui sait le faire, donc pas de soucis....
Publié : dim. 07/oct./2007 17:16
par Dr. Dri
Code : Tout sélectionner
Structure Bytes
b.b[0]
EndStructure
If FreeImage_GetBPP(clone) = 8
For y = 0 To FreeImage_GetHeight(clone) - 1
*bits.Bytes = FreeImage_GetScanLine(clone, y)
For x = 0 To FreeImage_GetWidth(clone) - 1
If bits\b[x] <> 128
throw(1)
EndIf
Next x
Next y
EndIf
Code : Tout sélectionner
Structure Bytes
b.b[0]
EndStructure
y = -cY
For i = height To 0 Step -1
*dst_bits.Bytes = FreeImage_GetScanLine(dst, i)
x = -cX
For j = width To 0 Step -1
d = ((x * x + y * y) * scale) >> 8
*dst_bits\b[j] = sinTab(d & $FF)
x + 1
Next j
y + 1
Next i
Dri

Publié : dim. 07/oct./2007 17:18
par tmyke
Cool, cette fois c'est complet...
