Frage

Ich habe eine Anforderung, die mit 10 x 6,88 cm für ein Bild verlangt. Ich weiß, dass ich von cm auf Pixel nicht einfach konvertieren kann, verursachen ein Pixelgröße auf der Benutzeranzeigeauflösung abhängt. Ich möchte wissen, ob es einen Weg gibt, um ein Bild zu skalieren, dass Größe in cm zu haben. (Ich brauche auch das Bild Erweiterung zu halten. Z.B .: es nicht umwandeln kann in einem PDF- oder anderer Erweiterung)

War es hilfreich?

Lösung

Es hängt wirklich von, in der Auflösung der Benutzer das Bild gedruckt wird (Größen in cm wenig Sinn, außer macht, wenn gedruckt). Wenn der Benutzer einen Druck in machen will, 200 dpi sagen, dann würde das Bild sein muß (10 / 2,54 * 200) (6,88 / 2,54 * 200) Pixel (die Division mit 2,54 benötigt wird, um zwischen cm und Zoll zu konvertieren ). Welche Auflösung, die benötigt wird, ist in hohem Maße davon abhängig, welche Art von Bild, um es ist, und die Qualitätsanforderungen des Benutzers.

Also einfach sagen: „I bis X von Y cm Größe verändert werden soll“ nicht wirklich Sinn machen.

Für ein Codebeispiel auf, wie die tatsächliche Größe ändern machen, wenn Sie die benötigten Größe des Bildes herausgefunden haben, diese SO beantworten Ihre Bedürfnisse abdecken sollte.

Andere Tipps

Eigentlich haben Sie zwischen dem Bild Größe auf dem Bildschirm zu unterscheiden, und die Bilder Größe auf dem Ausdruck.

in der Regel finden Sie die Formel:

inches = pixels / dpi

so folgt:

pixel = inches * dpi

Dies ist für den Druck, eigentlich.
Für die Anzeige ersetzen dpi mit ppi, und da sind Sie ja.

Für diejenigen (wie mich), die mit Zoll nicht vertraut sind:

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

Diese Routine wird die Pixelgröße berechnet die Bildanzeige X-cm auf dem Bildschirm zu haben.
Aber auf dem Drucker, Sie haben es nicht, dass einfach, da Sie nicht die DPI so einfach wie die PPI (bmp.HorizontalResolution & bmp.VerticalResolution) erhalten können.

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

Nutzung so gehen würde:

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

Bilddateiformate wie JPG und TIFF haben eine EXIF-Header , die Informationen wie horizontal hat und vertikaler DPI.

Wenn Sie also ein Bild erhalten, die diese Metadaten hat, könnten Sie die druckbare Größe überprüfen.

double DPC = Image_DPI * 0.393700787;

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

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

Wenn Sie Bilder, um die Größe zu nie diese bedruckbaren Dimensionen überschreiten, könnte man es anders machen um und berechnen eine DPI-Verhältnis, das innerhalb von 10 cm x 6.88cm Grenzen das Bild Abmessungen B x H fit lässt.

Art was Fredrik sagt: Ich würde einen schönen DPI und erfordern das Bild, dass die Auflösung oder größer zu sein (aber ist das gleiche Seitenverhältnis) und wenn / Drucken des Bildes zu exportieren, die Größe des Bildes auf dem DPI durch das andere Programm / Drucker verwendet ...

Es könnte so einfach, wie dies sein: Die meisten Bilder speichern die Anzahl der Pixel pro Zoll in ihnen. Abbildung der Anzahl der Pixel in jeder Dimension des Bildes aus und unterteilt die von der Anzahl Zoll (Umwandlung von cm). Verwenden Sie dann die ursprünglichen Bits, ändern Sie das Feld für die Anzahl der Pixel pro Zoll (oder, häufiger, Punkte pro Zoll).

So Ihr Bild braucht 3.93" x 2.71" zu sein. Wenn Ihr Bild 393px x 271px ist, würden Sie die dpi auf 100x100 eingestellt. Wenn Ihr Bild ist 39px x 27px, würden Sie die dpi auf 10x10 gesetzt.

Obwohl wahrscheinlich werden Sie einige Größenänderung zu tun haben, wie sie von anderen Antworten erklärt. :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top