Frage

Ich schrieb ein Verfahren zum Zuschneiden Bilder in C #. Er tut es, indem eine neue Bitmap erstellen und auf sie ein angegebenes Rechteck zeichnen (die Fläche abgeschnitten werden) aus dem Originalbild.

Für die Bilder, die ich habe versucht, mit ihm zu falschen Ergebnissen wurde zu erzeugen. Die Größe des resultierenden Bildes war richtig, aber der Inhalt war es. Es war wie wenn das Bild von 2 skaliert wurde und abgeschnitten dann. Schließlich Addiert man diese Zeile es fest:

result.setResolution(72, 72)

Aber warum muss ich eine Lösung? Ich arbeite nur mit Pixeln, nie mit Zoll oder Zentimetern. Auch, was wäre dann die richtige Auflösung?

Der vollständige Code ist diese Erweiterung Methode:

public static Bitmap Crop(this Image image, int x, int y, int width, int height) {
    Bitmap result = new Bitmap(width, height);
    result.SetResolution(72, 72);

    // Use a graphics object to draw the resized image into the bitmap.
    using (Graphics graphics = Graphics.FromImage(result)) {
        // 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, new Rectangle(x, y, width, height), GraphicsUnit.Pixel);
    }

    return result;
}
War es hilfreich?

Lösung

Sie haben die falsche Überlastung von DrawImage. Sie sollten mit dem man sein, wo Sie die Src und Dest Rects angeben.

graphics.DrawImage(image, new Rectangle(0, 0, width, height), new Rectangle(x, y, width, height), GraphicsUnit.Pixel);

Versuchen Sie das mal und lassen Sie mich in den Kommentaren wissen, ob es funktioniert nicht.

Andere Tipps

Ich vermute, dass die Antwort in der Art und Weise liegt tatsächlich die Bibliothek die Modifikation macht. es kopieren und Pasten nur um einige Speicherblöcke. die Auflösung gibt die Anzahl der Bits / Bytes pro Pixel verwendet. um zu wissen, wie viele Bytes er kopieren muss, muss er wissen, wie viele Bits / Bytes pro Pixel verwendet wird.

Deshalb denke ich, dies eine einfache Multiplikation mit einem memcopy gefolgt ist.

Bezug

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