Vincenzo's blog


Uno nessuno centomila



Anno 2015

Anno 2014

Anno 2010

Anno 2009

Anno 2007

Anno 2006

Anno 2005

Mettere uno sfondo all'immagine in c#

Che faticata ragazzi..  a volte penso di dover cambiare mestiere...
sarà forse che devo lavorare in più piattaforme e linguaggi e alla fine non so nulla delle particolarità delle cose...

Il problema che ho avuto è sul MakeTrasparent dell'oggetto Bitmap..

Ecco quello che successo:

Si è verificata l'esigenza di mettere uno sfondo a colori a delle immagini in bianco e nero o a scala di grigi che per mia fortuna hanno tutto sfondo bianco...

Sta di fatto che provando la MakeTrasparent l'immagine diventeva nera e son andato a fineire anche su un sito dove il tutto veniva fatto con gran successo per mezzo di API (http://www.phillo.it/dasBlog/PermaLink,guid,5e4bff0c-6f05-4d1d-b35c-65dfb90fb26b.aspx) .. ma leggendo e rileggendo e riprovando sono arrivato alla soluzione (alla fine banalissima) senza l'ausilio di API e usando la "benedetta" MakeTrasparent.

Ecco come:

//qui carico l'immagine di primo piano
System.Drawing.Image imgTop = System.Drawing.Image.FromFile([percorso immagine di primo piano]);

//qui carico l'immagine di sfondo
System.Drawing.Image imgSfondo = System.Drawing.Image.FromFile([percorso immagine di sfondo]);

//assegno gli agetti image alle bitmap e adatto quello di primo piano allo sfondo (si potrebbe anche fare il contrario)
System.Drawing.Bitmap bmpSfondo = new System.Drawing.Bitmap(imgSfondo, imgSfondo.Size);
System.Drawing.Bitmap bmpTop = new System.Drawing.Bitmap(imgTop, imgSfondo.Size);

//rendo trasparente il bianco dell'immagine che deve stare sopra
bmpTop.MakeTransparent(Color.FromArgb(255, 255, 255));

//creo l'oggetto grafics dalla bitmap di sfondo
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmpSfondo);

//posiziono l'immagine  sullo sfondo
g.DrawImage(bmpTop,0,0);

//e qui mi sono divertito a crerare un metodo Bold per rendere come in grassetto l'immagine di primo piano ciclando
//a secondo del valore di bold e posizionando piùvolte l'immagine di primo piano cambiando i valori delle coordinate di posizionamento..

//ed eccoci giunti al risultato
//salvo il file attenuto in uno stream o file e scelgo il formato di output (sempre a secondo quello che serve)
bmpSfondo.Save([stream di output o file] ,System.Drawing.Imaging.ImageFormat.Jpeg);

//alla fine rilascio la memoria degli oggetti

g.Dispose();
imgSfondo.Dispose();
imgTop.Dispose();
bmpTop.Dispose();
bmpSfondo.Dispose();

g = null;
imgSfondo = null;
imgTop = null;
bmpTop = null;
bmpSfondo = null;




Categoria: Develop
martedì, 16 ott 2007 Ore. 10.49
maggio 2024
lmmgvsd
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
  • Views Home Page: 27.065
  • Views Posts: 28.882
  • Views Gallerie: 78.377
  • n° Posts: 32
  • n° Commenti: 17
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003