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 :

Portabilité code BitMap [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut Portabilité code BitMap
    Bonsoir,

    J'obtiens une différence à l'exécution du même code source sous Lazarus Win7 32 bits et CodeTyphon (Lazarus 64) Ubuntu.

    J'obtiens sous Win7 l'affichage de l'image couleur attendue, mais sous Ubuntu une image reconnaissable, grise, avec des rayures colorées verticales...

    Pour éliminer certaines causes, j'ai sauvé dans un fichier le tableau RGB (PBA dans le code ci-dessous) que je passe en ScanLine à un TLazIntfImage, copié vers un BitMap qui est assigné à un TImage pour l'affichage (ouf !)

    Et le fichier correct sous Win7 donne la même image grise sous Ubuntu que celle obtenue par le traitement normal !

    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
      tms:=TMemoryStream.Create;
      tms.Write(PBA[0], FWidth*FHeight*3); // PBA = TByteArray : tableau de RGB style BitMap
      tms.SaveToFile('testbmp.bin');
      tms.Clear;
      tms.LoadFromFile('testbmp.bin');
      FillChar(PBA[0], FWidth*FHeight*3, 0);
      tms.Read(PBA[0], FWidth*FHeight*3);
      tms.Free;
      // passage au Bitmap de travail
      with ScanlineImage // TLazIntfImage
      do begin
        BeginUpdate;
          for yy:=0 to FHeight-1 // PRT = TRGBTripleArray absolute PBA
          do Move( PRT[yy*FWidth], TPRT(GetDataLineStart(yy))[0], ScanlineSize );
        EndUpdate;
      end;
      // puis à celui interne à passer
      FBitmap.LoadFromIntfImage(ScanlineImage);   
      // puis Image1.Picture.Assign(FBitmap);
    Je ne sais plus où donner de la tête !

    Merci pour vos pistes.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Je viens de faire le test inverse : le fichier tableau généré sous Ubuntu est bien affiché comme attendu sous Win7.

    Il y a donc une différence de comportement entre les 2 versions de Lazarus ou les 2 environnements dans le passage au TLazIntfImage ou au BitMap.

    Création du TLazIntfImage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      ScanlineImage:=TLazIntfImage.Create(0, 0, [riqfRGB]);
      with ScanlineImage
      do begin
        BeginUpdate;
          SetSize(FWidth, FHeight);
          CreateData;
        EndUpdate; 
      end;
    D'un côté, je suis content que mon code qui précède cette étape soit portable
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    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 : 56
    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
    comment est déclaré PRT ? n'y a-t-il pas une différence 32/64 bits ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Je ne crois pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    type
      // pixel RGB ou YUV
      TYUV3=packed record
      case Boolean of
        True : (Blue, Green, Red: Byte); // = TRGBTriple
        False: (Y, U, V: Byte);
      end;
     
      // ligne de pixels
      TPRT=array of TYUV3;    
     
    var
      PBA: PByteArray;
      PRT: TPRT absolute PBA; // pour traiter le buffer par octet, RGBTriple, ou YUV
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Voici la différence de rendu, qui ne laisse de me plonger dans la perplexité...
    Images attachées Images attachées  
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    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 : 56
    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
    attend "PRT = TRGBTripleArray absolute PBA" tu fais un absolute d'un record vers un pointeur ?

    PS: pourquoi utiliser un MemoryStream pour enregistrer sur disque ?!
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Voici la différence de rendu, qui ne laisse de me plonger dans la perplexité...
    L'analyse des deux images montre qu'il y a un problème flagrant de nombre d'octets par pixel (3 ou 4).

    L'image de gauche est celle de droite compressé sur un espace des 3/4 de celle de droite. La quart restant est rempli de je ne sais quoi.

    Maintenant, quel le problème ???

    Cordialement.

    Pierre

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

Discussions similaires

  1. Portabilité du code C++ de Windows -> Linux ?
    Par eraser570 dans le forum Linux
    Réponses: 29
    Dernier message: 04/09/2009, 17h02
  2. Portabilité de code Delphi
    Par ludovic tambour dans le forum EDI
    Réponses: 2
    Dernier message: 20/08/2005, 16h14
  3. [Update : Code solution][Bitmap] Se passer des ressources
    Par Clorish dans le forum Composants VCL
    Réponses: 13
    Dernier message: 13/07/2005, 12h16
  4. Comprendre un code asm relatif aux bitmaps
    Par sorry60 dans le forum Assembleur
    Réponses: 8
    Dernier message: 20/04/2005, 21h31
  5. Réponses: 13
    Dernier message: 13/03/2005, 20h56

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