Conversione di PixelFormats bitmap in C #

Devo convertire una bitmap da PixelFormat.Format32bppRgb in PixelFormat.Format32bppArgb .

Speravo di usare Bitmap.Clone, ma non sembra funzionare.

 Bitmap orig = new Bitmap("orig.bmp"); Bitmap clone = orig.Clone(new Rectangle(0,0,orig.Width,orig.Height), PixelFormat.Format24bppArgb); 

Se eseguo il codice sopra e poi controllo clone.PixelFormat è impostato su PixelFormat.Format32bppRgb . Cosa sta succedendo / Come posso convertire il formato?

Sloppy, non raro per GDI +. Questo lo risolve:

 Bitmap orig = new Bitmap(@"c:\temp\24bpp.bmp"); Bitmap clone = new Bitmap(orig.Width, orig.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); using (Graphics gr = Graphics.FromImage(clone)) { gr.DrawImage(orig, new Rectangle(0, 0, clone.Width, clone.Height)); } // Dispose orig as necessary... 

Per qualche ragione se si crea una Bitmap da un percorso file, ad esempio Bitmap bmp = new Bitmap("myimage.jpg"); e chiama Clone() su di esso, la Bitmap restituita non verrà convertita.

Comunque se crei un’altra Bitmap dalla tua vecchia Bitmap , Clone() funzionerà come previsto.

Prova qualcosa del genere:

 using (Bitmap oldBmp = new Bitmap("myimage.jpg")) using (Bitmap newBmp = new Bitmap(oldBmp)) using (Bitmap targetBmp = newBmp.Clone(new Rectangle(0, 0, newBmp.Width, newBmp.Height), PixelFormat.Format32bppArgb)) { // targetBmp is now in the desired format. } 
 using (var bmp = new Bitmap(width, height, PixelFormat.Format24bppArgb)) using (var g = Graphics.FromImage(bmp)) { g.DrawImage(..); } 

Dovrebbe funzionare così. Forse vuoi impostare alcuni parametri su g per definire la modalità di interpolazione per la qualità, ecc.