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

 Delphi Discussion :

Dégradé de couleur


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut Dégradé de couleur
    Bonjour,

    j'aimerais comprendre pourquoi, avec le code ultra-simplifié suivant, le dégradé de couleurs noir à rouge est bien dessiné sur Form1 (premier dessin : la teinte change de façon continue), alors qu'il n'est pas bien dessiné sur Image1 (second dessin : la teinte change de façon discontinue).

    Nom : Rouge.JPG
Affichages : 220
Taille : 2,7 Ko

    Je précise que le but n'est pas d'écrire un code pour dessiner un dégradé de couleur: On en trouve des tas d'exemples. Le but est de comprendre la raison de "l'anomalie" observée. Par exemple pourrait-il s'agir de formats différents des canevas respectifs, ou d'autre chose ?

    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Image1: TImage;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées}
      public
        { Déclarations publiques}
      end;
     
    var
      Form1:TForm1;
     
    implementation
     
    {$R *.DFM}
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
       i,j:integer;
    begin
         for i:=0 to 255 do
         begin
              for j:=0 to 20 do
              begin
                   Form1.canvas.Pixels[i,j]:=i;
              end;
         end;
     
         for i:=0 to 255 do
         begin
              for j:=0 to 20 do
              begin
                   Image1.canvas.Pixels[i,j]:=i;
              end;
         end;
    end;
     
    end.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    probablement une question de nombre de couleur

    utilise un TBitmap en pf32bit et assign le à l'image

    sinon il existe une fonction GradientFill dans l'API Windows aussi
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut
    Merci Paul THOT,

    en effet, c'est bien un problème de format. Avec le code ci-dessous, l'anomalie disparaît.

    C'est quand même curieux qu'il faille faire ce formatage pour Image1, alors qu'il n'y en ait pas besoin pour Form1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
         myBitmap:=Tbitmap.create;
         myBitmap.PixelFormat := pf32bit;
         myBitmap.height:=image1.height;
         myBitmap.width:=image1.width;
     
         for i:=0 to 255 do
         begin
              for j:=0 to 20 do
              begin
                   myBitmap.canvas.Pixels[i,j]:=i;
              end;
         end;
         image1.picture.Bitmap.Assign(myBitmap);
         myBitmap.free;

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Dans la TForm, tu dessines dans un Canevas lié à l'OS, ton ordinateur est généralement en 32Bits
    Dans la TImage, tu dessines dans un Canevas lié à un Bitmap, le Bitmap par défaut est en pfDevice, et la va savoir pourquoi chez toi, il n'est pas assimilé à de 32
    Sur le poste où je suis du cela fonctionne bien sans effet de crénelage que ce soit via Bitmap que ton premier code directement sur le TImage
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut
    OK. Maintenant, je comprends mieux. Merci pour cette explication qui est tout à fait logique.

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

Discussions similaires

  1. Dégradé de couleur
    Par néocodeur dans le forum Images
    Réponses: 7
    Dernier message: 18/04/2007, 14h15
  2. [VBA-E]dégradé de couleurs
    Par spileo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/04/2007, 07h45
  3. Dégradé de couleur dans un rectangle
    Par macoute dans le forum 2D
    Réponses: 3
    Dernier message: 10/01/2006, 16h30
  4. Réponses: 8
    Dernier message: 17/05/2005, 18h08
  5. [Image]Dégradé de couleur
    Par eyal555 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 12/04/2005, 09h10

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