c# - usos - mapa vectorial
Conversión de formatos de píxeles de mapa de bits en C# (3)
Por alguna razón, si crea un Bitmap
de Bitmap
partir de una ruta de archivo, es decir, Bitmap bmp = new Bitmap("myimage.jpg");
y llama a Clone()
, el Bitmap
devuelto no se convertirá.
Sin embargo, si crea otro Bitmap
de Bitmap
partir de su Bitmap
, Clone()
funcionará según lo previsto.
Pruebe algo como esto:
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.
}
Necesito convertir un mapa de bits de PixelFormat.Format32bppRgb
a PixelFormat.Format32bppArgb
.
Esperaba usar Bitmap.Clone, pero parece que no funciona.
Bitmap orig = new Bitmap("orig.bmp");
Bitmap clone = orig.Clone(new Rectangle(0,0,orig.Width,orig.Height), PixelFormat.Format24bppArgb);
Si ejecuto el código anterior y luego compruebo clone.PixelFormat, se establece en PixelFormat.Format32bppRgb
. ¿Qué está pasando / cómo convierto el formato?
Sloppy, no es raro para GDI +. Esto lo arregla:
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...
using (var bmp = new Bitmap(width, height, PixelFormat.Format24bppArgb))
using (var g = Graphics.FromImage(bmp)) {
g.DrawImage(..);
}
Debería funcionar así. Tal vez quiera establecer algunos parámetros en g
para definir el modo de interpolación para calidad, etc.