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 :

Besoin d'aide concernant l'exemple de l'aide sur le ScanLine de D7


Sujet :

Langage Delphi

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut Besoin d'aide concernant l'exemple de l'aide sur le ScanLine de D7
    Bonjour,

    Dans mon vieux Win2000 sp4 je pars du programme d'exemple de l'aide de mon D7 perso, où je peux lire :

    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
    procedure TForm1.Button1Click(Sender: TObject);
    // Cet exemple montre le dessin direct dans le BitMap
    var
      x,y : Integer;
      BitMap : TBitMap;
      P : PByteArray;
    begin
      BitMap := TBitMap.create;
      try
        // Sous Windows remplacer MyBitmap.png par un nom de chemin complet tel que
        // C:\Program Files\Common Files\Borland Shared\Images\Splash\256color\factory.bmp
        // j'adapte comme on me le dit ci-dessus, et ça donne :
        //BitMap.LoadFromFile('MyBitmap.png');
        BitMap.LoadFromFile('D:\Program Files\Fichiers communs\Borland Shared\Images\Splash\256Color\factory.bmp');
        for y := 0 to BitMap.Height -1 do
        begin
          P := BitMap.ScanLine[y];
          for x := 0 to BitMap.Width -1 do
            P[x] := y; // ligne de l'aide --> traits horizontaux
    //        P[x] := P[y]; // traits horizontaux où on retrouve les couleurs de l'image
    //        P[y] := P[x]; // image ok mais barrée d'un trait oblique à 45° allant d'en haut-à gauche à en bas-environ 180
        end;
        Canvas.Draw(0,0,BitMap);
      finally
        BitMap.Free;
      end;
    Vus les traits horizontaux qui sortent au click sur le bouton, on se demande quelle est l'utilité de cet exemple : a-t-on vraiment besoin d'ouvrir un fichier ?
    Vous avez le même résultat chez vous ?
    Nom : aide_d7_scanline.png
Affichages : 229
Taille : 59,5 Ko

    Fort de cette expérience, j'ai voulu pousser le bouchon un peu plus loin, et dans un autre bouton je code, dérivé du précédent,
    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
    procedure TForm1.Button2Click(Sender: TObject);
    var
      x,y : Integer;
      BitMap1,Bitmap2 : TBitMap;
      P1,P2 : PByteArray;
    begin
      BitMap1 := TBitMap.create;
      BitMap2 := TBitMap.create;
      try
        BitMap1.LoadFromFile('D:\Program Files\Fichiers communs\Borland Shared\Images\Splash\256Color\factory.bmp');
        BitMap2.PixelFormat := BitMap1.PixelFormat;
        BitMap2.Width := BitMap1.Width;
        BitMap2.Height:= BitMap1.Height;
        for y := 0 to BitMap1.Height -1 do
        begin
          P1 := BitMap1.ScanLine[y];
          P2 := BitMap2.ScanLine[y];
          for x := 0 to BitMap1.Width -1 do
            P2[x] := P1[x]; // couleurs à la ramasse mais forme bonne
        end;
        Canvas.Draw(0,0,BitMap2);
      finally
        BitMap1.Free;
        BitMap2.Free;
      end;
    et j'obtiens des couleurs complètement en vrac, regardez :
    Nom : couleurs_en_vrac.png
Affichages : 171
Taille : 112,4 Ko

    Pourquoi ?
    Est-ce à dire que la recopie for x := 0 to BitMap1.Width -1 do P2[x] := P1[x]; fait n'importe quoi ?
    Que faire pour avoir les bonnes couleurs ?

    Merci de vos retours,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Bonjour,

    pour que la copie soit exacte il te manque les données de la palette (le PixelFormat est en 8Bit)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         ...
        BitMap2.Palette := BitMap1.Palette;
        BitMap2.Width := BitMap1.Width;
        BitMap2.Height:= BitMap1.Height;
        for y := 0 to BitMap1.Height -1 do
        begin
         ...
    et la le résultat est bon
    Cordialement,
    @+

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Citation Envoyé par Cirec Voir le message
    Bonjour,

    pour que la copie soit exacte il te manque les données de la palette (le PixelFormat est en 8Bit)




    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

Discussions similaires

  1. besoin d'aide sur trigger
    Par devalender dans le forum SQL
    Réponses: 2
    Dernier message: 18/07/2004, 22h28
  2. [D7] Besoin d'aide sur un PChar
    Par bobby-b dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2004, 16h42
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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