IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Traduire un bout de code de c++ vers delphi


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 111
    Par défaut Traduire un bout de code de c++ vers delphi
    J'essaye de traduire cette fonction vers delphi.Quelqu'un peut m'aider?
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    void ClassImg::RGBtoYUV(LPBYTE pdest, LPBYTE psrc, DWORD w, LPBYTE m_AChannel)
    {
        LPBYTE dst = pdest;
    	LPBYTE src = psrc;
    	LPBYTE Ach = m_AChannel;
        DWORD w2 = w >> 1;
        while (w2--)
        {
            int B = *src++;
            int G = *src++;
            int R = *src++;
    		if (Ach) *Ach++ = *src++;
     
            int Y = ((long)(219l* 77*R + 219l*150*G + 219l* 29*B)>>16)+16;
            int U = ((long)(219l*131*B - 219l* 87*G - 219l* 44*R)>>16)+128;
     
        #define clip(x) (((x) & 0xffffff00) ? ((x) & 0x80000000) ? 0 : 255 : (x))
     
            *dst++ = clip(U);
            *dst++ = clip(Y);
     
            B = *src++;
            G = *src++;
            R = *src++;
    		if (Ach) *Ach++ = *src++;
     
            Y = ((long)(219l* 77*R + 219l*150*G + 219l* 29*B)>>16)+16;
            int V = ((long)(219l*131*R - 219l*110*G - 219l* 21*B)>>16)+128;
     
            *dst++ = clip(V);
            *dst++ = clip(Y);
        }
    }

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bonjour.

    Je ne suis pas un expert du C++ mais déjà l'opérateur >> du C++ tu peux le remplacer par l'opérateur shr. LPBYTE doit probablement être un pointeur sur un Byte (PByte).

    Pour le #DEFINE à priori ça déclare une fonction à la volée donc tu dois pouvoir faire pareil avec une fonction interne à la méthode.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 111
    Par défaut
    et le 219l? (219l c'est pas 2191)

  4. #4
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Ce ne serait pas pour dire qu'il faut le prendre en tant qu'entier long?

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 111
    Par défaut
    Citation Envoyé par Linkin Voir le message
    Ce ne serait pas pour dire qu'il faut le prendre en tant qu'entier long?
    peut etre que tu as raison.bon j'essaye la traduction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    Procedure RGBtoYUV(pdest,psrc:pbyte;w:longword;m_AChannel:pointer);
    var
      dst,src,ach:pbyte;
      w2:longword;
      r,g,b,y,u,v:byte;
    begin
      dst := pdest;
    	src := psrc;
    	Ach := m_AChannel;
      w2 := w shr 1;
      while (w2>0) do
      begin
            w2:=w2-1;
             inc(integer(src));
             B := src^;
             inc(integer(src));
             G := src^;
             inc(integer(src));
             R := src^;
         		if (Ach<>nil) then
              begin
                inc(integer(src));
                Ach:=src;
                inc(integer(Ach));
              end;
     
            Y := round(((219* 77*R + 219*150*G + 219* 29*B)shr 16)+16);
            U := round(((219*131*B - 219* 87*G - 219* 44*R)shr 16)+128);
     
    //#define clip(x) (((x) & 0xffffff00) ? ((x) & 0x80000000) ? 0 : 255 : (x))
     
    //        *dst++ = LIMIT(U);
    //        *dst++ = LIMIT(Y);
     
             inc(integer(src));
             B := src^;
             inc(integer(src));
             G := src^;
             inc(integer(src));
             R := src^;
          	if (Ach<>nil) then
              begin
                inc(integer(src));
                Ach:=src;
                inc(integer(Ach));
              end;
     
            Y := round(((219* 77*R + 219*150*G + 219* 29*B)shr 16)+16);
            V := round(((219*131*R - 219*110*G - 219* 21*B)shr 16)+128);
     
    //        *dst++ = LIMIT(V);
    //        *dst++ = LIMIT(Y);
        end;
    end;
    il me reste les commentaires

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    #define clip

    doit etre traduite par une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     clip(x) (((x) & 0xffffff00) ? ((x) & 0x80000000) ? 0 : 255 : (x))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function Clib (x : integer) : byte
    begin
     if ((x) and $ffffff00) Then
     begin
       if ((x) and $80000000) Then
         result := 0
       else
         result := 255;
     end
     else
       result := x; 
    end;
    la traduction des conditions n'est pas parfaite mais l'esprit de la traduction est là

    @+ Phil

Discussions similaires

  1. Traduire ce bout de code
    Par hdgetnet dans le forum Débuter
    Réponses: 2
    Dernier message: 25/05/2010, 17h08
  2. Traduire ce bout de code Delphi
    Par SmileSoft dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/10/2009, 16h43
  3. Traduction d'un code en C++ vers Delphi
    Par saidus dans le forum Langage
    Réponses: 3
    Dernier message: 06/11/2007, 16h55
  4. [SQL-Server] traduire un bout de code pour oracle en bout de code pour SQL SERVER
    Par teen6517 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/06/2007, 09h47
  5. Réponses: 23
    Dernier message: 26/04/2006, 19h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo