Oppure

Loading
21/07/10 14:46
kapooo
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?? :-?
aaa
21/07/10 16:36
HeDo
la tecnica è quella di disegnare un quadratino bianco (sfondo) nella posizione precedente e poi disegnare il quadratino rosso nella nuova posizione :)
aaa
21/07/10 18:12
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.

Ultima modifica effettuata da kapooo 21/07/10 18:14
aaa
21/07/10 18:36
HeDo
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
aaa
22/07/10 7:19
Il Totem
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:
msdn.microsoft.com/it-it/library/…
aaa