Lo que tengo:

   A JPEG image with 96dpi, size: 540 X 700

Lo que Quiero:
Imagen JPEG con 300 dpi, tamaño: 771 X 1000

Problema:
Cuando se cambia el tamaño de la imagen y, a continuación, intente cambiar la resolución, a través del siguiente código no funciona

       ///<summary>
    ///Changes the resolution of the image
    ///</summary>
    ///<param name="imgPath">Image Path</param>
    ///<param name="xResolution">x Resolution</param>
    ///<param name="yResolution">y Resolution</param>
    ///<returns>Modified Image Path</returns>
    private string ChangeResolution(string imgPath, int xResolution, int yResolution)
    {
        string fullFileName = Path.GetFileNameWithoutExtension(imgPath);
        string extension = Path.GetExtension(imgPath);
        string tmpFileSavedPath = outputDir + "\" + fullFileName + "_." + extension + "_tmp";

        Image original = Bitmap.FromFile(imgPath);
        original.Save(tmpFileSavedPath);

        Bitmap bmSmall = new Bitmap(tmpFileSavedPath);
        bmSmall.SetResolution(xResolution, yResolution);
        string modifiedOverLayImagePath = tmpFileSavedPath.TrimEnd("_tmp".ToCharArray());
        bmSmall.Save(modifiedOverLayImagePath);
        bmSmall.Dispose();

        //Deleting temp file
        System.IO.File.Delete(tmpFileSavedPath);
        return modifiedOverLayImagePath;
    }

significa que no contribuye en nada a la imagen, la resolución sigue siendo la misma, si voy revés, es decir, cambiar la resolución de la primera y, a continuación, cambiar el tamaño, sorprendentemente, el tamaño se cambia, pero la resolución se reduce de nuevo a 96 ppp.

Aquí está el código de cambio de tamaño:

public static System.Drawing.Bitmap ResizeImage(System.Drawing.Image image, int width, int height)
    {
        //a holder for the result
        Bitmap result = new Bitmap(width, height);

        //use a graphics object to draw the resized image into the bitmap
        using (Graphics graphics = Graphics.FromImage(result))
        {
            //set the resize quality modes to high quality
            graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            //draw the image into the target bitmap
            graphics.DrawImage(image, 0, 0, result.Width, result.Height);
        }

        //return the resulting bitmap
        return result;
    }

¿Alguien puede ayudarme, me estoy preguntando si 771 X 1000 soporta 300 dpi de resolución, pero cuando lo hago en photoshop funciona perfectamente, gracias

Siguiente es mi principal función en la que voy a cambiar la resolución de la primera de cambio de tamaño y después:

string imgPath = @"D:\abc\background.jpg";

        string newResPath = ChangeResolution(imgPath, 300, 300);

        Image oldImage = Bitmap.FromFile(newResPath);
        //Image newImage = ImageResize.ConstrainProportions(oldImage, 771, ImageResize.Dimensions.Width);
        Image newImage = ImageUtilities.ResizeImage(oldImage, 771, 1000);
        string savedPath = "D:\abc\saved.jpg";

        try
        {
            newImage.Save(savedPath, ImageFormat.Jpeg);
        }
        catch
        {
            MessageBox.Show("error");
        }
        newImage.Dispose();
InformationsquelleAutor shabby | 2012-01-18

3 Comentarios

  1. 0

    En resumen, los DPI no es importante en este caso

    Muy bien explicados en esta respuesta.

    DPI significa Puntos Por Pulgada. Una pista como la de 96 ppp reset es de la wikipedia:

    … muchas Ventanas de los programas de software se han escrito, desde la década de 1980 a asumir que la pantalla ofrece 96 PPI

    En realidad, la pantalla mostrará la imagen en su resolución, el (PPP o PPI, Pixels Per Inch) es determinado por el tamaño de tu pantalla. DPI realmente sólo entra en juego cuando la impresión de su imagen.

    Dependiendo del tipo de dispositivo que desea imprimir los DPI puede variar.

    • en el nuevo trazado se confirma que los DPI también es importante en la entrada/salida de la anchura y la altura, por lo tanto, si usted desea pintar un mapa de bits sobre otro mapa de bits con el origen de la altura y la anchura, y volver a crear un mapa de bits para ese propósito, pero la resolución es diferente, por lo tanto la partida de mapa de bits que no caben en el interior del contenedor nuevo… aunque, en teoría, la resolución sólo debería afectar el DPI
  2. 2
    private static Bitmap _resize(Image image, int width, int height)
    {
        Bitmap newImage = new Bitmap(width, height);
        //this is what allows the quality to stay the same when reducing image dimensions
        newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
        using (Graphics gr = Graphics.FromImage(newImage))
        {
            gr.SmoothingMode = SmoothingMode.HighQuality;
            gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
            gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
            gr.DrawImage(image, new Rectangle(0, 0, width, height));
        }
        return newImage;
    }
    • Buena respuesta, pero sería enormemente mejorado si se añade una explicación más detallada de lo que estás haciendo.
    • ¿qué son estas cosas de calidad?
  3. 1

    JPEG resolución real es cierta anchura por la altura píxeles – esto es lo que realmente importa. Así que el verdadero paso importante es ImageUtilities.ResizeImage a la más reciente resolución.

    DPI de resolución campo es sólo de carácter informativo y ofrece una especie de una pista de cómo es de grande el píxel original estaba en primer lugar. Así que, después de cambiar el tamaño de los píxeles que están a la actualización de DPI campo para cualquier valor que usted piensa que debería ser.

    • gracias, ¿tiene usted alguna idea de cómo actualizar los DPI en el campo? porque de mapa de bits.SetResolution(300, 300); no está funcionando, quiero que este campo sea de 300, de modo que cuando se abre en photoshop muestra 300dpi, gracias

Dejar respuesta

Please enter your comment!
Please enter your name here