Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C++ GDI]  rendere trasparente un quadratino disegnato
Forum - C# / VB.NET - [C++ GDI] rendere trasparente un quadratino disegnato

Avatar
kapooo (Normal User)
Newbie


Messaggi: 2
Iscritto: 21/07/2010

Segnala al moderatore
Postato alle 16:46
Mercoledý, 21/07/2010
Salve a tutti primo post :)

Ho un problema con GDI+. Ho necessitÓ di disegnare su un immagine un quadratino di un certo colore (es. Rosso) e di farlo muovere in determinate posizioni. Dato che GDI+ non permette la traslazione di un disegno ma deve essere prima traslato e poi ridisegnato nella nuova posizione, sorge la necessitÓ di cancellare il triangolino vecchio.

Per farlo avevo pensato di usare il metodo MakeTrasparent(Color) impostando come colore da rendere trasparente il rosso proprio quello del quadratino disegnato.

Codice:

Graphics^ g = CreateGraphics();
Pen^ pen = gcnew Pen(System:rawing::Color::Red);
SolidBrush^ brush = gcnew SolidBrush(System:rawing::Color::Red);
Bitmap^ sfondo = gcnew Bitmap("sfondo.jpg");

g->DrawImage(sfondo,0,0);
g->DrawRectangle(pen, x, y, 9.0F, 9.0F);
g->FillRectangle(brush,x,y,9.0F,9.0F);

Color backColor =sfondo->GetPixel(x+1,x+1);
sfondo->MakeTrasparent(backColor);
g->DrawImage(sfondo, sfondo->Width,0);

Quello che accade Ŕ che il colore che si trova a x+1,y+1 (Ŕ rosso) viene effettivamente reso trasparente su sfondo.jpg ma rede trasparente i quadratini.

E' come se DrawRectangle creasse i quadratini su un layer superiore all'immagine e quindi il metodo MakeTrasparent non li "vede".

Sapete aiutarmi?? :-?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2764
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 18:36
Mercoledý, 21/07/2010
la tecnica Ŕ quella di disegnare un quadratino bianco (sfondo) nella posizione precedente e poi disegnare il quadratino rosso nella nuova posizione :)


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
kapooo (Normal User)
Newbie


Messaggi: 2
Iscritto: 21/07/2010

Segnala al moderatore
Postato alle 20:12
Mercoledý, 21/07/2010
Non posso disegnare un quadratino bianco perchŔ ho per sfondo un immagine ed andrei a coprirla e non posso neppure disegnare direttamente il pezzettino di immagine purtroppo.


Ultima modifica effettuata da kapooo il 21/07/2010 alle 20:14
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2764
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 20:36
Mercoledý, 21/07/2010
Testo quotato

Postato originariamente da kapooo:

Non posso disegnare un quadratino bianco perchŔ ho per sfondo un immagine ed andrei a coprirla e non posso neppure disegnare direttamente il pezzettino di immagine purtroppo.




eh guarda, dovresti creare un composition engine che Ŕ in grado di tenere traccia di tutti i layers degli "oggetti" e a seconda dei movimenti ricomporre la scena :) Ŕ una cosa che di solito fanno i motori grafici


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:19
Giovedý, 22/07/2010
Testo quotato

Postato originariamente da kapooo:

Non posso disegnare un quadratino bianco perchŔ ho per sfondo un immagine ed andrei a coprirla e non posso neppure disegnare direttamente il pezzettino di immagine purtroppo.




Il fatto che tu abbia come sfondo un'immagine e che il puntino rosso non scompaia mi fa pensare che questa immagine Ŕ statica (quindi non catturata da un flusso). Se Ŕ sempre la stessa, puoi ottenere il colore di un pixel tramite un oggetto Bitmap associato all'immagine. Dato che usi visual C++.NET sarÓ pi¨ semplice e pi¨ efficiente farlo usando i puntatori. Guarda l'esempio in C++ nella pagina:
http://msdn.microsoft.com/it-it/library/system.drawing.ima ...


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupiditÓ."
(Fligende Blatter)

"Dubitare di se stessi Ŕ il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote