Estoy tratando de escribir un método para reducir el tamaño de cualquier imagen. Se llama el 50% cada vez pero he encontrado un problema. A veces, termino con un tamaño de archivo más grande mientras que la imagen es realmente solo la mitad de lo que era. Me estoy ocupando de DPI y PixelFormat. ¿Qué más me estoy perdiendo?A veces, la reducción de un mapa de bits genera un archivo más grande. ¿Por qué?
Gracias por su tiempo.
public Bitmap ResizeBitmap(Bitmap origBitmap, int nWidth, int nHeight)
{
Bitmap newBitmap = new Bitmap(nWidth, nHeight, origBitmap.PixelFormat);
newBitmap.SetResolution(
origBitmap.HorizontalResolution,
origBitmap.VerticalResolution);
using (Graphics g = Graphics.FromImage((Image)newBitmap))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(origBitmap, 0, 0, nWidth, nHeight);
}
return newBitmap;
}
Editar: Aquí está el código que falta:
int width = (int)(bitmap.Width * 0.5f);
int height = (int)(bitmap.Height * 0.5f);
Bitmap resizedBitmap = ResizeBitmap(bitmap, width, height);
resizedBitmap.Save(newFilename);
Edición 2: Sobre la base de sus comentarios, esta es la solución I he encontrado:
private void saveAsJPEG(string savingPath, Bitmap bitmap, long quality)
{
EncoderParameter parameter = new EncoderParameter(Encoder.Compression, quality);
ImageCodecInfo encoder = getEncoder(ImageFormat.Jpeg);
if (encoder != null)
{
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = parameter;
bitmap.Save(savingPath, encoder, encoderParams);
}
}
private ImageCodecInfo getEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
if (codec.FormatID == format.Guid)
return codec;
return null;
}
Compresión? Los bits/píxel comprimidos son diferentes. – graphicdivine
Publica tu código de exportación de C# JPEG. También supongo que es un problema de compresión. – futureelite7
Ah, acabo de agregar el código que falta –