Traduction de code C++

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Traduction de code C++

Message 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];
		}
	}
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

T'es chaud toi! Pas d'en-tête, rien! Qu'est-ce que tu veux au fond?
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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).
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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++.
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message 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 ... ;)
Dernière modification par tmyke le sam. 06/oct./2007 17:05, modifié 1 fois.
Force et sagesse...
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

tmyke a écrit :j'te traduit cela dans les 30 mn ...
et moi, dans 30.... ans :oops:
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message 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
Force et sagesse...
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Merci à tt le monde de m'avoir aidé... Je teste ca dès que possible.

ReMerci TMyke. Content de te revoir :)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message 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 :)
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Ouai, et si en plus elle avait les meme yeux que toi, elle me foutrais
définitivement les jetons...

:D
Force et sagesse...
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message 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....
Force et sagesse...
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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 ;)
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Cool, cette fois c'est complet... :)
Force et sagesse...
Répondre