Pregunta

Tengo un requisito que solicita una imagen con 10 X 6,88 cm. Sé que no puedo convertir simplemente de cm a píxeles, porque un tamaño de píxel depende de la resolución de la pantalla del usuario. Me gustaría saber si hay una manera de cambiar el tamaño de una imagen para tener ese tamaño en cm. (Necesito mantener la extensión de la imagen también. Por ejemplo, no puedo convertirla en un pdf u otra extensión)

¿Fue útil?

Solución

Realmente depende de la resolución en la que el usuario imprimirá la imagen (los tamaños en cm no tienen más sentido que cuando se imprime). Si el usuario desea imprimir, digamos 200 ppp, entonces la imagen tendría que ser (10 / 2.54 * 200) por (6.88 / 2.54 * 200) píxeles (se necesita la división con 2.54 para convertir entre cm y pulgadas ). La resolución que se necesita depende en gran medida del tipo de imagen y los requisitos de calidad del usuario.

Así que solo digo "quiero cambiar el tamaño a X por Y cm" Realmente no tiene sentido.

Para un ejemplo de código sobre cómo hacer el cambio de tamaño real una vez que haya averiguado el tamaño necesario de la imagen, esta SO respuesta debería cubrir sus necesidades.

Otros consejos

En realidad, debe diferenciar entre el tamaño de las imágenes en la pantalla y el tamaño de las imágenes en la impresión.

normalmente, encuentras la fórmula:

inches = pixels / dpi

por lo que sigue:

pixel = inches * dpi

Esto es para imprimir, en realidad.
Para la pantalla, reemplace dpi con ppi, y listo.

Para aquellos (como yo) que no están familiarizados con las pulgadas:

inches = pixels / dpi
pixel = inches * dpi
1 centimeter = 0.393700787 inch
pixel = cm * 0.393700787  * dpi

Esta rutina calculará el tamaño en píxeles para que la imagen se muestre X-cm en el monitor.
Pero en la impresora, no lo tiene tan fácil, ya que no puede obtener el DPI tan fácil como el PPI (bmp.HorizontalResolution & amp; bmp.VerticalResolution).

public static int Cm2Pixel(double WidthInCm)
{
    double HeightInCm = WidthInCm;
    return Cm2Pixel(WidthInCm, HeightInCm).Width;
} // End Function Cm2Pixel


public static System.Drawing.Size Cm2Pixel(double WidthInCm, double HeightInCm)
{
    float sngWidth = (float)WidthInCm; //cm
    float sngHeight = (float)HeightInCm; //cm
    using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1, 1))
    {
        sngWidth *= 0.393700787f * bmp.HorizontalResolution; // x-Axis pixel
        sngHeight *= 0.393700787f * bmp.VerticalResolution; // y-Axis pixel
    }

    return new System.Drawing.Size((int)sngWidth, (int)sngHeight);
} // End Function Cm2Pixel

el uso sería así:

public System.Drawing.Image Generate(string Text, int CodeSize)
        {
            int minSize = Cm2Pixel(2.5); // 100;
            if (CodeSize < minSize)
                CodeSize = minSize;

            if (string.IsNullOrEmpty(Text))
            {
                System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(CodeSize, CodeSize);

                using (System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(bmp))
                {

                    gfx.Clear(System.Drawing.Color.Black);
                    using(System.Drawing.Font fnt = new System.Drawing.Font("Verdana", 12, System.Drawing.FontStyle.Bold))
                    {
                        double y = CodeSize / 2.0 - fnt.Size;
                        gfx.DrawString("No Data", fnt, System.Drawing.Brushes.White, 5, (int)y, System.Drawing.StringFormat.GenericTypographic);
                    } // End Using fnt

                } // End using gfx

                return bmp;
            } // End if (string.IsNullOrEmpty(Text))

...[Generate QR-Code]
return [Generated QR-Code]
}

Los formatos de archivo de imagen como JPG y TIFF tienen un encabezado EXIF ?? que tiene información como horizontal y DPI vertical.

Por lo tanto, si obtienes una imagen que tiene estos metadatos, puedes verificar el tamaño imprimible.

double DPC = Image_DPI * 0.393700787;

double widthInCm = Image_Width * DPC;
double heightInCm = Image_Height * DPC;

if (widthInCm <= 10 && heightInCm <= 6.88) // do stuff

Si necesita cambiar el tamaño de las imágenes para no exceder nunca estas dimensiones imprimibles, puede hacerlo al revés, y calcular una relación de DPI que permita que la imagen de las dimensiones W x H se ajuste dentro de límites de 10 cm x 6.88 cm.

Tipo de lo que dice Fredrik: Tomaría un buen DPI y requeriría que la imagen tuviera esa resolución o más (pero tiene la misma relación de aspecto) y al exportar / imprimir la imagen, redimensione la imagen al DPI usado por el otro programa / impresora ...

Puede ser tan simple como esto: la mayoría de las imágenes almacenan la cantidad de píxeles por pulgada en ellas. Calcule el número de píxeles en cada dimensión de su imagen y divídalo por el número de pulgadas (convertir de cm). Luego use los bits originales, solo modifique el campo para el número de píxeles por pulgada (o, más comúnmente, puntos por pulgada).

Por lo tanto, su imagen debe ser 3.93 " x 2.71 " ;. Si su imagen es de 393px x 271px, debe establecer el dpi a 100x100. Si su imagen es de 39px x 27px, establecería el dpi a 10x10.

Aunque probablemente tendrás que hacer algunos cambios de tamaño, como se explica en otras respuestas. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top