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

Lazarus Pascal Discussion :

TBitMap et Scanline [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre prolifique Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 740
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 740
    Par défaut TBitMap et Scanline
    Bonjour,

    Je transcris en Lazarus un composant Delphi que j'utilise sans problème et que je n'ai pas écrit, je l'avoue !

    Dans le code du composant Delphi, il y a ces lignes...
    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
     
    for y:=0 to d.Height-1 do
      begin
      l:=c.ScanLine[y];
      t:=d.ScanLine[y];
      for x:=0 to d.Width-1 do
        if not ((l^[x*3+2]=255) and (l^[x*3+1]=0) and (l^[x*3]=0) and
               (t^[x*3+2]=0) and (t^[x*3+1]=0) and (t^[x*3]=255)) then
          begin
          if Result=0 then
            Result:=CreateRectRgn(x,y,x+1,y+1)
          else
            begin
            r:=CreateRectRgn(x,y,x+1,y+1);
            CombineRgn(Result,Result,r,RGN_OR);
            DeleteObject(r);
            end;
          end;
      end;
    c et d sont des TBitMap
    l et t sont des PBtyteArray;

    Hélas, je viens de découvrir que ScanLine n'existe pas dans Lazarus !

    Comme je suis une bille de première en graphisme, j'ai beau chercher, je ne vois pas comment traduire ces quelques lignes !

    Est-ce que quelqu'un peut m'aider ?

    Merci d'avance

    JS

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    TBitmap.RawImage.Data^
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre prolifique Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 740
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 740
    Par défaut
    Dois-je en conclure que RawData remplace ScanLine ? Et que je peux remplacer
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l := d.RawImage.Data^[y]
    ?

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    pas exactement, j'avais vu ça il y a longtemps

    RawImage.Data est un pointeur vers le tableaux de tous les pixels.

    sans avoir testé je pense qu'il faut faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var
      LineWidth: Intege;
      ScanLine: PByte;
    begin
      LineWidth := Bitmap.Description.BytesPerLine;
      ScanLine := Bitmap.RawImage.Data; // première ligne
      for i := 0 to Bitmap.Height - 1 do
      begin
        ...traitement du scanline...
        Inc(ScanLine, LineWidth); // ligne suivante
      end;
    end;
    mais il est possible que l'ordre des lignes soit inversé, je ne sais pas dans quel sens le RawBitmap est stocké, ni si cet ordre est dépendant de l'OS (les Bitmap Windows ont la tête en bas)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre prolifique Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 740
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 740
    Par défaut
    Merci, je m'en suis sorti !

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 117
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 117
    Par défaut Déterrage motivé !
    Bonsoir,

    Désolé de déterrer ce topic vieux de presque 2 ans, mais le commentaire de Jon est plus que sibyllin et mystérieux, et ne m'aide pas beaucoup...
    Citation Envoyé par Jon Shannow Voir le message
    Merci, je m'en suis sorti !
    Jon, comment ? ? ?


    Dans l'attente, si tu passes par là Paul, j'ai voulu utiliser ton bout de code pour passer un exemple trouvé chez efg et qui fonctionne bien en Delphi, et je bute comme Jon sur ce scanline...

    J'ai fait comme ça (le but de la manip est de dessiner des ronds RGB ou CMY dans une TImage de 480 x 480 sur la Form) :
    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
      // RESULT est un TBitmap
      LineWidth := RESULT.RawImage.Description.BytesPerLine; // = 1920 vu en step-by-step
      ScanLine := RESULT.RawImage.Data; // (Paul) première ligne
     
      Getmem(row, SizeOf(row)*LineWidth);
      FillChar(row^, SizeOf(row)*LineWidth, '0');
     
      FOR j := 0 TO RESULT.Height-1 DO
      BEGIN
        //row := RESULT.Scanline[j]; // original Delphi
        row := @Scanline;
     
        FOR i := 0 TO RESULT.Width-1 DO  // crash ici (SIGSEGV) avec j = 237 et i = 479
        // 238 x 480 = 114240, ça ne me parle pas, d'autant plus que juste pour voir,
        // si je mets .Width-2 ça crashe pareil avec j = 237 et i = 478
        BEGIN
          WITH row[i] DO
          // work with row
        END;
        Inc(ScanLine, LineWidth); // (Paul) ligne suivante
     
      END;
      Freemem(row, SizeOf(row)*LineWidth);
    Une idée ?
    Merci d'avance,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme fct TBitmap::ScanLine
    Par comrad85 dans le forum C++Builder
    Réponses: 11
    Dernier message: 19/01/2008, 23h41
  2. pb couleur avec Scanline
    Par bobymaw dans le forum C++Builder
    Réponses: 6
    Dernier message: 10/05/2004, 22h25
  3. TBitmap et problèmes de pointeurs...
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/07/2003, 13h39
  4. Rotation de Bitmap -> ScanLine
    Par jujuesteban dans le forum Langage
    Réponses: 7
    Dernier message: 03/07/2003, 15h11
  5. tbitmap.free dans une function
    Par portu dans le forum Langage
    Réponses: 7
    Dernier message: 19/06/2003, 22h08

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