Accueil > Forum > > > > Surlignage semi transparent dans un Bitmap ?
Surlignage semi transparent dans un Bitmap ?
dimanche 2 janvier 2005 à 15:15:44 |
Surlignage semi transparent dans un Bitmap ?

TigWdz
|
Bonjour, je voudrais faire du surlignage dans une bitmap. Je m'explique : J'ai une bitmap qui représente du texte, et je veux, à la manière d'un marqueur fluo, surligner des lignes du texte, en semi transparence. Comment faire ? Je pense qu'il faut utilmiser AlphaBlend. J'arrvie a rendre ma bitmap semi transparente (ce qui n'est pas le but), mais je n'arrive pas a faire un rectangle de couleur semi transparent dans ma bitmap. Mon code : (que j'ai plus attrapé sur le net à la base, au quelle j'ai essayé de bidouillé de la transparence) void CArchiv2View::DrawBitmap( CDC *pDC, HBITMAP hBitmap, HPALETTE hPal, int xDest, int yDest ) { // Get logical coordinates BITMAP bm; ::GetObject( hBitmap, sizeof( bm ), &bm ); CPoint size( bm.bmWidth, bm.bmHeight ); pDC->DPtoLP(&size); CPoint org(0,0); pDC->DPtoLP(&org); // Mon DC mémoire // Create a memory DC compatible with the destination DC CDC memDC; memDC.CreateCompatibleDC( pDC ); memDC.SetMapMode( pDC->GetMapMode() ); //memDC.SelectObject( &bitmap ); HBITMAP hBmOld = (HBITMAP)::SelectObject( memDC.m_hDC, hBitmap ); // Je me suis dis qu'il fallais que je créé un DC dans le quel je //dessinais ma ligne CDC LigneDC; LigneDC.CreateCompatibleDC( pDC ); LigneDC.SetMapMode( pDC->GetMapMode() ); CRect rc=CRect(200, 200, 700, 220); CBrush brush(RGB(255, 255, 0)); LigneDC.FillRect(rc, &brush); // les propriétes de transparence BLENDFUNCTION blendF; blendF.BlendOp = AC_SRC_OVER; blendF.BlendFlags = 0; blendF.SourceConstantAlpha = 100; //blendF.AlphaFormat = AC_SRC_ALPHA; blendF.AlphaFormat = 0; // je copie en tranparence le DC contenant la ligne dans le memDC (qui contient deja ma bitmap) memDC.AlphaBlend(0, 0, 1000, 1000, &LigneDC, 0, 0, 1000, 1000, blendF); // Select and realize the palette if( hPal && pDC->GetDeviceCaps(RASTERCAPS) & RC_PALETTE) { SelectPalette( pDC->GetSafeHdc(), hPal, FALSE ); pDC->RealizePalette(); } // et je copie le memDC dans mon PaintDC pDC->BitBlt(xDest, yDest, size.x, size.y, &memDC, org.x, org.y, SRCCOPY); ::SelectObject( memDC.m_hDC, hBmOld ); } Que est ce qui cloche ?
|
|
dimanche 2 janvier 2005 à 15:37:02 |
Re : Surlignage semi transparent dans un Bitmap ?

DARKSIDIOUS
|
Ce que je te conseille : travailler dans un DC temporaire qui contient l'image en fond, et la couleur de surlignage sur tout l'image, ainsi, tu n'aurais plus qu'à copier la zone voulue avec BitBlt par exemple. _______________________________________ DarK Sidious [Responsable API/VB du site www.ProgOtoP.com] Téléchargez ProgOtoP API Viewer
|
|
dimanche 2 janvier 2005 à 16:08:53 |
Re : Surlignage semi transparent dans un Bitmap ?

TigWdz
|
Mais comment je fais pour avoir un DC qui contient mon image ET ma couleur de surlignage (en semi transparence) sur toute l'image ?
|
|
dimanche 2 janvier 2005 à 16:20:05 |
Re : Surlignage semi transparent dans un Bitmap ?

DARKSIDIOUS
|
Ben tout d'abord tu copie ton image dans le DC temporaire. Ensuite, tu crée un nouveau DC temporaire qui contient uniquement la couleur de transparence en fond. Tu applique le DC temporaire de la couleur de surlignage sur le DC temporaire contenant le fond à l'aide de la fonction AlphaBlend sur toute l'image, et tu détruit le DC temporaire contenant la couleur de fond. Tu obtiens alors un DC temporaire avec l'image surlignée en semi-transparence, et tu n'as plus qu'à copier la partie de l'image que tu veux sur ton image de destination selon les coordonnées du surlignage. Ainsi, ca évite de devoir appeler trop souvent AlphaBlend : si tu modifie ton surlignage souvent, tu n'as qu'à copier le bout d'image correspondant, et non recalculer toute la semi-transparence avec la couleur ! _______________________________________ DarK Sidious [Responsable API/VB du site www.ProgOtoP.com] Téléchargez ProgOtoP API Viewer
|
|
dimanche 2 janvier 2005 à 17:19:40 |
Re : Surlignage semi transparent dans un Bitmap ?

TigWdz
|
Bon je débude dans le domaine alors je metrise pas trop la chose. Pourquoi cela ne fonctionne pas ? (le surlignage n'apparait pas dans mon imgae)
NB : dans a la derniere ligne quand je remplace &memDC par &TempImgDC ou &TempClrDC (pour voir a quoi ressemble ces DC) rien ne s'affiche, ils sembles vides.
NB : je dessine dans une child frame d'une appli MDI
void CArchiv2View::DrawBitmap2( CDC *pDC, HBITMAP hBitmap, HPALETTE hPal, int xDest, int yDest ) { // Get logical coordinates BITMAP bm; ::GetObject( hBitmap, sizeof( bm ), &bm ); CPoint size( bm.bmWidth, bm.bmHeight ); pDC->DPtoLP(&size);
CPoint org(0,0); pDC->DPtoLP(&org);
// Create a memory DC compatible with the destination DC CDC memDC; memDC.CreateCompatibleDC( pDC );
// DC Temporaire contenant l'image CDC TempImgDC; TempImgDC.CreateCompatibleDC( pDC );
// DC Temporaire contenant la couleur de transparence CDC TempClrDC; TempClrDC.CreateCompatibleDC( pDC ); TempClrDC.SetBkColor(RGB(255, 255, 0));
// on copie l'image dans le memDC HBITMAP hBmOld = (HBITMAP)::SelectObject( memDC.m_hDC, hBitmap );
// on copie l'image dans le DC temporaire TempImgDC.BitBlt(xDest, yDest, size.x, size.y, &memDC, org.x, org.y, SRCCOPY);
// infos blend BLENDFUNCTION blendF; blendF.BlendOp = AC_SRC_OVER; blendF.BlendFlags = 0; blendF.SourceConstantAlpha = 100; blendF.AlphaFormat = 0;
// on copie le DC couleur en transpance sur le DC temp image TempImgDC.AlphaBlend(xDest, yDest, size.x, size.y, &TempClrDC, xDest, yDest, size.x, size.y, blendF);
memDC.BitBlt(100,100, 300, 20, &TempImgDC, 100, 100, SRCCOPY);
// on detruit le dc couleur TempClrDC.DeleteDC();
pDC->BitBlt(xDest, yDest, size.x, size.y, &memDC, org.x, org.y, SRCCOPY); }
|
|
dimanche 2 janvier 2005 à 17:26:04 |
Re : Surlignage semi transparent dans un Bitmap ?

DARKSIDIOUS
|
Je ne sais pas si ca vient de là (tout dépend des coordonnées en fait), mais pour l'appel à l'AlphaBlend, je te disais d'appliquer la semitransparence à tout l'image et non uniquement à un bout, donc fait ceci : // on copie le DC couleur en transpance sur le DC temp image TempImgDC.AlphaBlend(0, 0, size.x, size.y, &TempClrDC, 0, 0, size.x, size.y, blendF); _______________________________________ DarK Sidious [Responsable API/VB du site www.ProgOtoP.com] Téléchargez ProgOtoP API Viewer
|
|
dimanche 2 janvier 2005 à 17:38:21 |
Re : Surlignage semi transparent dans un Bitmap ?

TigWdz
|
Ca n'a rien changé.
Mais est ce normale que dans la derniere commande, si au lieu de
pDC->BitBlt(xDest, yDest, size.x, size.y, &memDC, org.x, org.y, SRCCOPY);
je mets
// pour afficher le DC temporaire contenant une copie de l'image pDC->BitBlt(xDest, yDest, size.x, size.y, &TempImgDC, org.x, org.y, SRCCOPY);
ou
// pour afficher le DC de la couleur de surlignage (qui devarait être jaune) pDC->BitBlt(xDest, yDest, size.x, size.y, &TempClrDC, org.x, org.y, SRCCOPY);
pour voir a quoi reseemblent les DC temporaire, rien ne s'affiche ?
|
|
dimanche 2 janvier 2005 à 17:54:48 |
Re : Surlignage semi transparent dans un Bitmap ?

DARKSIDIOUS
|
Malheureusement, je ne vais pas pouvoir t'aider plus : je suis un programmeur VB, et je suis débutant en C++ : je suis beaucoup moins à l'aise sous VC++ pour faire du graphisme ! Je laisserais donc cette question à ceux qui passent par là et qui connaissent la réponse. Je ne peux que te guider dans l'algorithme à choisir. _______________________________________ DarK Sidious [Responsable API/VB du site www.ProgOtoP.com] Téléchargez ProgOtoP API Viewer
|
|
dimanche 2 janvier 2005 à 17:58:17 |
Re : Surlignage semi transparent dans un Bitmap ?
|
lundi 3 janvier 2005 à 22:30:47 |
Re : Surlignage semi transparent dans un Bitmap ?

vdust
|
Je pense que le problème viens de ta manipulation des bitmaps, qui
permettent de mémoriser les données graphiques de tes DC. Lorsque tu
écris
HBITMAP hBmOld = (HBITMAP)::SelectObject( memDC.m_hDC, hBitmap );
tu associes la bitmap hBitmap au DC memDC.
Une chose que tu dois savoir : chaque DC doit avoir une bitmap unique
associée pour pouvoir manipuler son contenu. Tu doit donc créer pour
chaque DC une nouvelle bitmap avec la fonction CreateCompatibleBitmap avant de pouvoir effectuer des opérations dessus.
De plus, tu dois pouvoir utiliser les capacités de la fonction AlphaBlend : Au lieu d'écrire
pDC.AlphaBlend(0, 0, 1000, 1000, &LigneDC, 0, 0, 1000, 1000);
tu peux écrire
pDC.AlphaBlend(l, t, r, b, &LigneDC, l, t, r, b);
où (l, t) et (r, b) sont les coordonnées respectives des coins gauche-haut et droit-bas du rectangle que tu veux surligner. Dans ce cas, Tu créer avec CreateCompatibleBitmap une bitmap de la même taille que l'image source hBitmap que tu associes à LigneDC et que tu rempli avec la couleur de surlignage en utilisant FillRect sur toute l'image.
Voilà ! J'espère que ça marchera (en tout cas, en théorie, c'est a priori ça).
|
|
Cette discussion est classée dans : bitmap, pdc, hbitmap, memdc, blendf
Répondre à ce message
Sujets en rapport avec ce message
SetClipboardData + CF_BITMAP [ par vecchio56 ]
J'essaye de mettre un bitmap dans la clipboard, mais vu que je ne sais pas trop comment ca marche les bitmap, je galère un peu. Voila ou j'en suis:HBI
Affichage d'un Bitmap [ par vintrouj ]
Bonjour,je cherche à afficher une image bitmap préalablement chargé dans un objet de type CBitmap. Le code que j'utilise affiche l'image pendant très
Bitmap [ par zainal ]
Salut a vousbon voila, je voudrai afficher une bitmap dans une zone de static et j ai creer ce bout de code qui ne marche pas vous vous en douter !voi
Diaporama d'images bitmaps... le plus simple possible... [ par Druith2 ]
Bonjour, je galère depuis le début de la semaine (je suis un neophyte veritable). Je cherche un moyen simple pour créer un diaporama de 12 images bitm
Accelération affichage image bitmap [ par corben dallas ]
Bonjour à tous,Mon problème est le suivant: je cherche à afficher un flux vidéo constitué d'images bitmap dans une fenêtre. Mon code est le suivant:dc
Afficher une bitmap ... - API Windows [ par banane_rose ]
hBitmap = LoadImage(hInst, "Timer.bmp", IMAGE_BITMAP, 10, 10, LR_DEFAULTSIZE|LR_LOADFROMFILE); Message d'erreur : invalid conversion from `void*' to
redimentionnement d'image, aidez-moi svp [ par sousou_one ]
salut à tous,je veux construire une bitmap par copie d'une région d'une bitmap source, je dois prendre les nouvelles dimensions en sélectionnant la ré
pd de cdc en mémoire :( [ par CoyoteVsBeepBeep ]
hello,j'ai un petit soucis avec du graphisme.j'ai une boite de dialogue dans laquelle je veux faire une petite animation (background + une animation p
Bitmap et MFC [ par torNADoS ]
Salut,je voudrais savoir comment puis je acceder au bits d'une image bitmap sous MFCsuuposons que j ai HBITMAP hBitmap//handlerCBitmap m_bmpBitmap//Im
Comment fabriquer un HBITMAP à partir d'un Bitmap* (GDI+) ? [ par Hellbar ]
Bonjour !Je bute sur un problème depuis quelques jours.Je réalise une application qui doit être capable de charger un bitmap à partir d'un fichier, en
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|