begin process at 2010 02 10 13:17:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Mutimédia

 > 

Image & Vidéo

 > 

Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence

lundi 4 mai 2009 à 13:33:59 | Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence

MAURICIO

Bonjour à tous,

je voudrais savoir s' il existe une méthode plus performante pour copier une partie d' un TGraphic vers un Canvas.

Pour l' instant, je passe par un TBitmap que je crée dynamiquement:
          if (MaxWidth <> aBgPicture.Picture.Width) or ((MaxHeight <> aBgPicture.Picture.Height))
          then begin
            // Copy part of the image :
            TmpBmp := TBitmap.Create;

            // Try converting into bitmap
            TmpBmp.Width  := MaxWidth;
            TmpBmp.Height := MaxHeight;
            TmpBmp.PixelFormat := pf32bit;
            aBgPicture.Picture.Graphic.Transparent := false;
            TmpBmp.Canvas.Draw(0, 0,  aBgPicture.Picture.Graphic);
            TmpBmp.Transparent := aBgPicture.Transparent;
            aCanvas.Draw(x, y,  TmpBmp);
            TmpBmp.Free;
          end
          else
            aCanvas.Draw(x, y,  aBgPicture.Picture.Graphic);

Merci,
Maurício
lundi 4 mai 2009 à 13:35:03 | Re : Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence

MAURICIO

Notez que TGraphic (aBgPicture.Picture) peut avoir plusieurs formats:
Bmp, metafile, jpeg, png etc ...
lundi 4 mai 2009 à 13:46:49 | Re : Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence

cirec

Membre Club Administrateur CodeS-SourceS
Salut,

regarde mon dernier code :
http://www.delphifr.com/codes/BITMAP-32BITS-INTEGRE-VCL-TIMAGE-TPICTURE-TBITMAP-TOPENPICTUREDIALOG_49861.aspx

pour un exemple d'utilisation de la fonction AlphaBlend .... elle fait exactement ce que tu demandes ...

si tu doutes ... dans mon code démo j'affiche un bitmap32 (donc vraie transparence) sur un JPEG sans le convertir avant en BMP !!!

cette fonction se fout du format elle demande un DC source et un DC Dest

 
@+
Cirec

lundi 4 mai 2009 à 13:59:02 | Re : Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence

cirec

Membre Club Administrateur CodeS-SourceS
j'ai peut être pas bien saisi ton problème donc je te propose aussi de regarder du coté TransparentBlt

voilà donc soit l'une où l'autre devrait convenir

 
@+
Cirec

lundi 4 mai 2009 à 14:37:56 | Re : Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence

MAURICIO

Merci Cirec,

je vais jeter un oeil!
Après réflexion, je n' ai pas besoin de transparence dans mon cas ...
Ce que je veux c' est que ça marche avec tous les formats qui peuvent être dans le TGraphic.

Je vais généraliser la question :
je désire copier une partie d' une image (définie par un TRect) contenue dans un TGraphic vers un TCanvas.

Merci,
A+
lundi 4 mai 2009 à 14:38:44 | Re : Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence

MAURICIO

J' ai pensé au Bitblt() au départ ...
lundi 4 mai 2009 à 14:40:20 | Re : Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence

MAURICIO

Remarks

The TransparentBlt function works with compatible bitmaps (DDBs).

Celle ci ne marche qu' avec des bitmaps :(

lundi 4 mai 2009 à 15:28:51 | Re : Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence

cirec

Membre Club Administrateur CodeS-SourceS
pour une copie complète ceci devrait suffir :
aCanvas.Draw(x, y,  aBgPicture.Picture.Graphic);

 
@+
Cirec

lundi 4 mai 2009 à 15:36:25 | Re : Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence

MAURICIO

Bem justement, c' est ce que je fais pour l' instant (regarde dans le "else") :

if (MaxWidth <> aBgPicture.Picture.Width) or ((MaxHeight <> aBgPicture.Picture.Height))
          then begin
            // Copy part of the image :
            TmpBmp := TBitmap.Create;

            // Try converting into bitmap
            TmpBmp.Width  := MaxWidth;
            TmpBmp.Height := MaxHeight;
            TmpBmp.PixelFormat := pf32bit;
            aBgPicture.Picture.Graphic.Transparent := false;
            TmpBmp.Canvas.Draw(0, 0,  aBgPicture.Picture.Graphic);
            TmpBmp.Transparent := aBgPicture.Transparent;
            aCanvas.Draw(x, y,  TmpBmp);
            TmpBmp.Free;
          end
          else
            aCanvas.Draw(x, y,  aBgPicture.Picture.Graphic);

De plus, j' ai un autre problème pour les png sous Delphi 2009 :
en DesignTime, Picture.Graphic <> Nil fonctionne, mais en run-time non ...

A+

lundi 4 mai 2009 à 15:48:08 | Re : Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence

MAURICIO

"De plus, j' ai un autre problème pour les png sous Delphi 2009 :
en DesignTime, Picture.Graphic <> Nil fonctionne, mais en run-time non ..."

Ce problème est résolu en mettant "pngimage" dans les uses ...
A+

1 2

Cette discussion est classée dans : picture, partie, canvas, tmpbmp, abgpicture


Répondre à ce message

Sujets en rapport avec ce message

une fonctionnalité... [ par ViB ] salut,J'ai fais mes armes sur VB6, mais là, je débute sous deplhi.Je voudrais savoir comment peut-on faire sous D6 pour trouver facilement (outre CRTL Problème avec Canvas.draw [ par fabiin ] salut,voici mon prob:j'utilise un threaddans ce thread dans ce thread je dessine sur un TBitmap(jusque la pas de problème)ensuite, je veu afficher mon Arriere-plant [ par KillKrEv ] Comment je mais un arriere-plant mais pas mettre une image et lagrandire , mais je pence que c'est pas comme ca ca ce fait , Si cest comme ca ca ce fa Canvas ds un RichEdit [ par SuperNoizo ] Je voudrais savoir si c'est possible de créer un controle perso. d'ancetre TRichEdit et d'y intégrer un TCanvas?Si possible cmt?MerciSupeRNoiZo<img sr Execution d'une partie en même temps [ par Bruto ] Je voudrais savoir comment faire pour qu'une partie de mon programme s'exécute pendant que mon prog continue.Le but recherché est pourquoi attendre la Composant erreur canvas [ par Bruto ] Voila j'essaye de créer un composant & je récupère une erreur que je n'arrive pas à élucider.Il me dit 'Identificateur non déclaré Canvas' pour la lig J'EN AI MARRE [ par sebrs1 ] J'AI VRAIMENT BESOIN D'AIDE !!!j'ai plusieurs tableau dynamiques, je clique sur nouvelle partie, là sa redimmensionne les tableaux comme il faut, jusq Existe-t-il une methode plus rapide que draw... [ par balgrim ] Existe-t-il une methode plus rapide que draw pour ecrire sur un canvas. En fait, j'ai un bmp, et un canvas et j'aimerais pouvoir tres rapidement envoe image.canvas.textout [ par Frank19 ] lorsque je fais un image.canvas.textout ... sa l'écrit sur mon image sauf que c noir sur un fond blanc ... est-ce qui aurait moyen de mettre le fond t CopyRect Transparent [ par Zynox ] J aimeré pouvoir faire un copyrect transparent d d une portion d image.canvas vers un canvas sans utilisr le copybrush ou brushcopy ki est trop trop l


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,232 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales