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 :

API Bitblt: perte de qualité


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 207
    Par défaut API Bitblt: perte de qualité
    Bonjour à tous,

    Afin de rendre une interface plus conviviale, je cherche à développer mes composants perso.

    Je suis actuellement sur le Richedit que je cherche à rendre transparent.

    Grace à Waskol et à la discussion qui se trouve ici, j'ai déja réussi à placer le texte du richedit dans une paintbox.

    Maintenant, je cherche à appliquer une image d'arrière plan.

    Pour cela, j'ai copié le canva de mon image dans un buffer, puis j'ai tenté d'utiliser BitBlt avec l'option SRCCOPY.

    Dans ce cas, je copie bêtement mon buffer, et la qualoté est OK

    Puis j'ai essayé avec l'option SRCPAINT, qui est censé me combiner mes deux canvas (texte + image)

    Ca fonctionne, malheureusement, j'ai une perte non négligeable de qualité.

    Est-ce que certains paramètres m'auraient échappé ou est-ce inapproprié d'utiliser cette API???

  2. #2
    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
    à vu de nez tu vas perdre tout le bénéfice de l'antialiasing de Windows (lisser les polices)

    une petite recherche sur Google m'a permis de trouver la réponse

    tu ne peux pas rendre un Richedit transparent, par contre tu peux lui demander de s'afficher sur un Canvas !

    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
     
    {
    The rich edit control itself cannot be made transparent without a lot of 
    problems. But you can get it to render its text onto any kind of canvas, 
    e.g. a bitmap.canvas or a TImage canvas.
    }
    procedure TForm1.Button2Click(Sender: TObject);
    var
      imagecanvas: TCanvas;
      fmt: TFormatRange;
    begin
      imagecanvas := image1.canvas;
      with fmt do begin
        hdc:= imagecanvas.handle;
        hdcTarget:= hdc;
        // rect needs to be specified in twips (1/1440 inch) as unit
        rc:=  Rect( 0, 0,
                    imagecanvas.cliprect.right * 1440 div pixelsperinch,
                    imagecanvas.cliprect.bottom * 1440 div pixelsperinch
                    );
        rcPage:= rc;
        chrg.cpMin := 0;
        chrg.cpMax := richedit1.GetTextLen;
      end;
      SetBkMode( imagecanvas.Handle, TRANSPARENT );
      richedit1.perform( EM_FORMATRANGE, 1, integer( @fmt ));
      // next call frees some cached data
      richedit1.perform( EM_FORMATRANGE, 0, 0 );
      image1.refresh;
      // refresh is necessary since the control only refreshes automatically  
      // if a canvas method is used to change its content.
     
    end;
    {
    This assumes TImage contains a bitmap image. Add the richedit unit to your 
    Uses clause (the one after the Implementation keyword).
     
    Peter Below (TeamB)  100113.1101@compuserve.com)
    No e-mail responses, please, unless explicitely requested!
    }
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 207
    Par défaut
    Effectivement, la méthode que tu donnes est celle que j'utilise (je copie le texte sur un paintbox, plus adapté à la manipulation de graphiques il paraît)

    Alors soit j'ai loupé un épisode, soit je n'ai pas tout compris, mais cette "astuce" m'a juste permi d'écrire le texte du richedit (avec la mise en forme!) mais sans image de fond.

    Pourtant, plus je regarde le code, et plus je me dis que ça devrait le faire.

    Donc partant du code que tu as donnés, j'ai décidé d'ajouter l'arrière plan après coup...

    Avec Bitblt ça fonctionne, mais avec un rendu brouillon...

    Je retourne à mon code pour voir si je n'ai pas fait de bétises!

Discussions similaires

  1. [FLASH 8] Perte de qualité
    Par Kouspi dans le forum Flash
    Réponses: 4
    Dernier message: 11/07/2006, 13h26
  2. Perte de qualité *.AVI
    Par diaboloche dans le forum Vidéo
    Réponses: 12
    Dernier message: 19/05/2006, 17h27
  3. Réponses: 2
    Dernier message: 13/03/2006, 16h03
  4. [IMAGE][RESIZE] perte de qualité
    Par jlbinfo dans le forum 2D
    Réponses: 4
    Dernier message: 06/08/2005, 11h13
  5. [GD] probleme de perte de qualité lors de miniature de photos?
    Par brasco06 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 23/05/2005, 16h03

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