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 :

Demande Information sur "TransparentColorValue"


Sujet :

Delphi

  1. #1
    Membre averti
    Avatar de Claude URBAN
    Homme Profil pro
    Prendre le temps de vivre. . .
    Inscrit en
    Mai 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prendre le temps de vivre. . .

    Informations forums :
    Inscription : Mai 2006
    Messages : 274
    Points : 327
    Points
    327
    Par défaut Demande Information sur "TransparentColorValue"
    Bonjour,

    Oui, je sais, je ne suis pas exactement sur le bon Forum, et ce n'est pas une erreur.
    Mais je cherche désespérement une réponse à mon problème que je n'arrive pas à trouver sur le Forum C++Builder ni sur l'ensemble du site.

    Et comme Delphi / BCB même combat...je me suis dit que peut-être !
    D'autant plus que la communauté Delphi semble beaucoup plus importante que celle de BCB. (dommage pour moi )

    Et que malgrè tout, ma question étant d'ordre général. ...

    Donc, en espèrant ne pas trop déranger, voici mes questions:

    Pour obtenir un fond transparent, il suffit de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TransparentColor = true;
    TransparentColorValue = clGreen; 
    (par exemple,green étant la couleur du fond que l'on souhaite transparente.)

    Or, avec cette méthode, soit le fond est transparent, (alpha=0), soit le fond est opaque, (alpha=255).

    Je pense avoir compris qu'une image transparente est codée sur 4 octets.
    Les 3 premiers pour les couleurs RVB et le dernier pour une valeur Alpha définissant le niveau de transparence, allant de 0 à 255.
    OK, mais que se passe-t-il après ?...

    Questions:
    1/ Comment peut-on faire pour obtenir SUR CHAQUE PIXEL, une valeur alpha intermédiaire, qui serait fonction par exemple, de la valeur alpha de l'ombre d'une image ?

    2/ Quelqu'un peut-il m'expliquer ce qui se passe à l'intérieur de la propiété : "TransparentColorValue".
    Quel est le mécanisme qui fait que le fond devient transparent.
    ou me dire ou je pourrai trouver l'explication (SVP EN FRANCAIS)

    3/ Sur quelle variable agit-on, (ou que fait-on, après), quand-on donne une valeur à Alpha ?

    D'avance merci pour vos réponses.

    J'utilise BCB6 sous Windows XP.

    Claude

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Points : 218
    Points
    218
    Par défaut
    bonjour

    1) utiliser d'autres composants graphiques -> GRAPHICS32 mais je ne sais pas si cela existe pour BCB

    2 - 3 ) pour rendre quelque chose d'une couleur donnée totalement transparent en general c'est une suite d'operation binaire incluant des AND NOT XOR sur la couleur des pixels, ce qui ce passe exactement je ne sais pas

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 69
    Points : 76
    Points
    76
    Par défaut
    Si tu veux dessiner avec de l'alpha, il faut faire le dessin toi même pixel par pixel en utilisant la propriete Scanline...

    pour chaque composante de couleur (R, V, B) tu fais un truc du genre :
    ou Alpha est un byte (0-255) qui indique le degres de transparence :

    RougeDest := (RougeDest*Alpha + RougeSource*(255-Alpha)) div 255;

    voici un bout de code qu j'utilise :
    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
    48
    49
     
    procedure DrawAlphaMask(x, y: integer; BmpSource, BmpDest: TBitmap);
    type
      TLigneInt=array of Longword;
    var
      PtLgnSource,
        PtLgnDest: Pointer;
      Yd: integer;
      XPtrLgnSource: integer;
      XPtrLgnDest: integer;
      Alpha: LongWord;
      InvAlpha: LongWord;
      CSource: LongWord;
      CDest: LongWord;
      XMin, YMin: integer;
      XMax, YMax: integer;
    begin
      BmpDest.PixelFormat := pf32bit;
      BmpSource.PixelFormat := pf32bit;
     
      with BmpSource do
      begin
        XMin := Max(0, -x);
        YMin := Max(0, -y);
        XMax := Min(Width-1, BmpDest.Width-x-1);
        YMax := Min(Height-1, BmpDest.Height-y-1);
     
        for Yd := YMin to YMax do
        begin
          PtLgnSource := ScanLine[Yd];
          PtLgnDest := BmpDest.ScanLine[Yd+Y];
          XPtrLgnDest := X+XMin;
          for XPtrLgnSource := XMin to XMax do
          begin
            CSource := TLigneInt(PtLgnSource)[XPtrLgnSource];
            InvAlpha := CSource shr 24;
            Alpha := 255-InvAlpha;
            CDest := TLigneInt(PtLgnDest)[XPtrLgnDest];
     
            TLigneInt(PtLgnDest)[XPtrLgnDest] := (((CDest and $FF0000)*Alpha+(CSource and $FF0000)*InvAlpha)div 255)and $FF0000+
              (((CDest and $FF00)*Alpha+(CSource and $FF00)*InvAlpha)div 255)and $FF00+
              (((CDest and $FF)*Alpha+(CSource and $FF)*InvAlpha)div 255)and $FF;
            inc(XPtrLgnDest);
          end;
        end;
      end;
     
      BmpDest.Modified := True;
    end;
    Bruno.

Discussions similaires

  1. Demande informations sur la transparence
    Par Claude URBAN dans le forum Windows
    Réponses: 2
    Dernier message: 04/01/2007, 19h11
  2. Demande information sur "TansparentColorValue.."
    Par Claude URBAN dans le forum C++Builder
    Réponses: 12
    Dernier message: 19/12/2006, 16h59
  3. Demande information sur les librairie.
    Par argon dans le forum C
    Réponses: 2
    Dernier message: 29/03/2006, 16h22

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