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

Composants VCL Delphi Discussion :

[VCL] Comment faire une barre d'outils skinable comme FireFox ?


Sujet :

Composants VCL Delphi

  1. #21
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut oui
    Tu as raison c'est en fait ce qu'il me faut , mais je ne sais pas comment faire :

    Sinon, tu dois faire un masque du bitmap, et tu n'effectue l'AA que sur le contour. Ca revient à l'appliquer sur tout pixel non-masqué ayant un pixel masqué dans son 4-voisinage (Haut/Bas/Gauche/Droite), et à ne pas en faire si son 4-voisinage n'est composé que de pixels non-masqués.
    Tu te bases sur la couleur de transparence pour savoir qui est "pixel masqué" ? Comment peux-tu appliquer l'AA QUE sur ce 4-voisinage ?

    Bref, quelle méthode utilises-tu, toi, pour créer le masque de l'image et quelle est la formule magique ensuite pour lui dire d'appliquer le 4-voisinage comme tu dis ?




    Nb : pour l'AA je n'ai réussi à faire fonctionner que cette procédure trouvé sur le forum :

    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
    PROCEDURE TForm1.AntiAlias(clip:tbitmap);
    VAR x,y:Integer;p0,p1,p2:pbytearray;
    BEGIN
     clip.PixelFormat:=pf24bit;
     FOR y:=max(1,0)TO min(clip.height-2,clip.height)DO BEGIN
      p0:=clip.ScanLine[y-1];
      p1:=clip.scanline[y];
      p2:=clip.ScanLine[y+1];
      FOR x:=max(1,0)TO min(clip.width-2,clip.width)DO BEGIN
       p1[x*3]:=(p0[x*3]+p2[x*3]+p1[(x-1)*3]+p1[(x+1)*3])DIV 4;
       p1[x*3+1]:=(p0[x*3+1]+p2[x*3+1]+p1[(x-1)*3+1]+p1[(x+1)*3+1])DIV 4;
       p1[x*3+2]:=(p0[x*3+2]+p2[x*3+2]+p1[(x-1)*3+2]+p1[(x+1)*3+2])DIV 4;
      END;
     END;
     Repaint;
    END;
    et pour le masque j'utilisais ça mais la transparence n'est pas effectuée et pour le 4-voisinage je vois pas si ça peut s'adapter :

    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
    procedure TForm1.Button1Click(Sender: TObject);
    var bitfile,bittmp,bittmp2:tbitmap;
        i:integer;
        MyRect,MyOther:TRect;
    begin
       bitfile:=tbitmap.create;
       bittmp:=tbitmap.create;
       bittmp2:=tbitmap.create;
    try
           bitfile.loadfromfile('Image.bmp');
           bittmp.Width:=ImageList1.width; bittmp.height:=ImageList1.height;
           bittmp2.Width:=ImageList1.width; bittmp2.height:=ImageList1.height;
           for i:= 0 to ((bitfile.width div ImageList1.width)-1) do
           begin
              MyRect :=Rect(i*ImageList1.width,0,i*ImageList1.width+ImageList1.width,ImageList1.height+0);
              MyOther :=Rect(0,0,ImageList1.width,ImageList1.height);
     
              bittmp.Canvas.CopyRect(MyOther,Bitfile.Canvas,MyRect);
              bittmp2.canvas.draw(0,0,bittmp);
              Bittmp2.Monochrome :=true;
              AntiAlias(bittmp2);
              ImageList1.add(bittmp,bittmp2);
     
              //ImageList1.addmasked(bittmp,bitfile.Canvas.Pixels[0,0]);
           end;
    except end;
       bitfile.free;
       bittmp.Free;
    end;

  2. #22
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut Re: oui
    Citation Envoyé par DarkChamallo
    Tu te bases sur la couleur de transparence pour savoir qui est "pixel masqué" ?
    Ben oui, forcément, sinon comment veux-tu savoir où commence le bitmap et où est le fond ??

    Citation Envoyé par DarkChamallo
    Comment peux-tu appliquer l'AA QUE sur ce 4-voisinage ?
    Un AA s'applique pixel par pixel, déjà. Donc, le but du jeu est de "limiter" les pixels qui vont subir un AA. On utilise des copies du bitmap pour travailler tranquillement (il faut toujours avoir l'image d'origine pour calculer un AA).

    Citation Envoyé par DarkChamallo
    Bref, quelle méthode utilises-tu, toi, pour créer le masque de l'image
    Heu.... La question est sérieuse, où tu veux juste plaisanter ??? Je crée le masque de l'image de la même manière que toi quand tu as inséré ton bitmap dans ton TImageList, voyons !! C'est la (les) méthode(s) que Tixu et moi t'avons données précédemment !! Comme ce masque est strictement monochrome, tu peux déterminer facilement quels sont les pixels "du fond" et ceux "du bitmap".

    Citation Envoyé par DarkChamallo
    et quelle est la formule magique ensuite pour lui dire d'appliquer le 4-voisinage comme tu dis ?
    Soit un pixel de ton bitmap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pixel:=Bitmap.ScanLines[Y][X];
    Jusque là, c'est simple.
    Le 4-voisinage du pixel, c'est les 4 pixels B.S[Y-1][X], B.S[Y+1][X], B.S[Y][X-1] et B.S[Y][X+1], tout simplement.
    Une fois que tu as déterminé (par le nombre de pixels du 4-voisinage situés dans le masque) quels sont les pixels du bord, tu obtiens un masque "secondaire" qui est constitué des pixels de ce fameux bord, justement. Le masque secondaire est à cheval sur l'image et sur le masque, normalement.
    Je rappelle que tu peux savoir si un pixel fait partie du masque secondaire si :
    - Le pixel fait partie du masque, et au moins un pixel de son 4-voisinage fait partie de l'image.
    - Le pixel fait partie de l'image, et au moins un pixel de son 4-voisinage fait partie du masque.

    OK jusque là ?

    Ensuite, l'AA d'un pixel se calcule de cette manière :
    - S'il fait partie du masque : On ne touche pas, on laisse la couleur du fond et/ou la couleur transparente.
    - Il fait partie de l'image hors masque secondaire : on laisse le pixel d'origine, sans AA.
    - Il fait partie du masque secondaire : on fait la moyenne des couleurs des pixels du 8-voisinage et du pixel en question et on met cette moyenne comme couleur du pixel. On peut "alléger" l'AA en utilisant des coefficients pondérés pour les pixels (ex : 60% pour le pixel central, et 5% par pixel du 8-voisinage), ce qui réduit l'effet de flou mais, bien sûr, lisse également beaucoup moins l'image.

    Attention : lors du calcul du 8-voisinage, il faut pour les pixels du masque initial prendre la couleur du fond (=> il faut la déterminer ou l'imposer), pour les pixels d'image prendre la couleur d'origine. On ne tient pas compte du fait que le pixel du voisinage fasse partie du masque secondaire ou pas.

    Est-ce que tout est clair ?

  3. #23
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut ok
    Bon hé bien ya pluka :o
    Hé vive les math
    Merci bcp

  4. #24
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    Citation Envoyé par tixu Voir le message
    il me semble que dans le composant tToolbar (par exemple) on peut choisir plusieur imagelist correspondant a different etats du bouton (survol, disabled etc...)
    Ah oui!!C'est super mais comment faire ça ??

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Débutant] Comment faire une barre de chargement
    Par Alucard9800XT dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 23/04/2007, 22h04
  2. comment faire une barre d'évaluation ?
    Par jey182 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 20/04/2007, 15h15
  3. Réponses: 2
    Dernier message: 20/10/2006, 20h41
  4. Faire une barre d'outils volante
    Par ThanosT dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 24/09/2005, 21h00
  5. Comment faire une Barre de Menu?
    Par gamerome dans le forum OpenGL
    Réponses: 5
    Dernier message: 18/02/2005, 14h46

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