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;