Domanda

Ho un requisito che richiede un'immagine con 10 X 6,88 cm. So che non posso semplicemente convertire da cm a pixel, perché una dimensione di pixel dipende dalla risoluzione del display dell'utente. Vorrei sapere se esiste un modo per ridimensionare un'immagine per avere quella dimensione in cm. (Devo mantenere anche l'estensione dell'immagine. Ad es .: impossibile convertirla in pdf o altra estensione)

È stato utile?

Soluzione

Dipende molto da quale risoluzione l'utente stamperà l'immagine (le dimensioni in cm hanno poco senso se non quelle stampate). Se l'utente desidera effettuare una stampa, ad esempio 200 dpi, l'immagine dovrebbe essere di (10 / 2.54 * 200) per (6.88 / 2.54 * 200) pixel (la divisione con 2.54 è necessaria per convertire tra cm e pollici ). La risoluzione necessaria dipende fortemente dal tipo di immagine e dai requisiti di qualità dell'utente.

Quindi, solo dicendo " Voglio ridimensionare a X di Y cm " non ha davvero senso.

Per un esempio di codice su come effettuare il ridimensionamento effettivo una volta individuate le dimensioni necessarie dell'immagine, questa risposta SO dovrebbe coprire le tue esigenze.

Altri suggerimenti

In realtà, devi distinguere tra la dimensione delle immagini sullo schermo e la dimensione delle immagini sulla stampa.

di solito, trovi la formula:

inches = pixels / dpi

quindi segue:

pixel = inches * dpi

Questo è per la stampa, in realtà.
Per il display, sostituisci dpi con ppi e il gioco è fatto.

Per quelli (come me) che non hanno familiarità con i pollici:

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

Questa routine calcolerà la dimensione dei pixel per visualizzare l'immagine sul monitor X-cm.
Ma sulla stampante non è così facile, dal momento che non è possibile ottenere il DPI facile come il 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

l'utilizzo andrebbe così:

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]
}

I formati di file immagine come JPG e TIFF hanno una intestazione EXIF ?? che ha informazioni come orizzontale e DPI verticale.

Pertanto, se si ottiene un'immagine con questi metadati, è possibile verificare la dimensione stampabile.

double DPC = Image_DPI * 0.393700787;

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

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

Se è necessario ridimensionare le immagini per non superare mai queste dimensioni stampabili, è possibile farlo al contrario e calcolare un rapporto DPI che consenta all'immagine delle dimensioni L x A di adattarsi entro limiti di 10 cm x 6,88 cm.

Tipo di cosa sta dicendo Fredrik: Vorrei prendere un bel DPI e richiederei che l'immagine fosse quella risoluzione o più grande (ma abbia le stesse proporzioni) e quando esporta / stampa l'immagine, ridimensiono l'immagine al DPI usato dall'altro programma / stampante ...

Potrebbe essere semplice: la maggior parte delle immagini memorizza il numero di pixel per pollice. Calcola il numero di pixel in ogni dimensione dell'immagine e dividerlo per il numero di pollici (converti da cm). Quindi utilizza i bit originali, modifica il campo per il numero di pixel per pollice (o, più comunemente, punti per pollice).

Quindi la tua foto deve essere 3.93 " x 2,71 '' Se l'immagine è 393px x 271px, impostare dpi su 100x100. Se la tua immagine è 39px x 27px, imposti il ??dpi su 10x10.

Anche se probabilmente dovrai fare un ridimensionamento, come spiegato da altre risposte. :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top