Frage

Ich versuche, ein Bild zu beschneiden. Ich habe mehrere Wege gefunden, dies zu tun, aber keine durchführen, wie ich möchte. Sobald das Bild abgeschnitten wird, schicke ich es an einen PDF-Generator. Wenn ich den normalen jpg senden, es funktioniert gut, aber wenn ich das Bild beschneiden, ist es nicht in der richtigen Größe der PDF-Datei kommt durch. Ich denke, es könnte mit einer Auflösung zu tun.

Es sieht in der HTML-Ansicht in Ordnung, aber wenn es um PDF veröffentlicht, das Bild kommt kleiner als das, was erwartet wird.

Hier ist das Zuschneiden Code Ich bin mit:

            try
        {
            System.Drawing.Image image = System.Drawing.Image.FromFile(img);
            Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            bmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);

            Graphics gfx = Graphics.FromImage(bmp);
            gfx.SmoothingMode = SmoothingMode.AntiAlias;
            gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;
            gfx.PixelOffsetMode = PixelOffsetMode.HighQuality;
            gfx.DrawImage(image, new Rectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel);
            // Dispose to free up resources
            image.Dispose();
            //bmp.Dispose();
            gfx.Dispose();

            return bmp;
        }
        catch (Exception ex)
        {
            //MessageBox.Show(ex.Message);
            return null;
        }

Ich habe auch versucht, dies:

Bitmap temp = (Bitmap)System.Drawing.Image.FromFile(img);
        Bitmap bmap = (Bitmap)temp.Clone();
        if (xPosition + width > temp.Width)
            width = temp.Width - xPosition;
        if (yPosition + height > temp.Height)
            height = temp.Height - yPosition;
        Rectangle rect = new Rectangle(xPosition, yPosition, width, height);
        temp = (Bitmap)bmap.Clone(rect, bmap.PixelFormat);

Ich schreibe dies in den Kontext Strom aus:

Bitmap bm = Helper.CropImage(@"MyFileLocation", 0, 0, 300, 223);
        context.Response.ContentType = "image/jpg";
        bm.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
        bm.Dispose();

Interessant ist, wenn ich ein TIFF-Bild versuchen, und das Kontexttyp ändern, ich bin ein generischen GDI + Fehler zu erhalten. Von der Forschung, sieht es wie ein Problem suchen, aber nicht sicher, wie es entweder zu lösen.

War es hilfreich?

Lösung

Wenn Sie eine PDF-Datei mit Sie im Auge behalten, die Sie bei der Druckauflösung suchen eher als die Bildschirmauflösung.

A 600 x 600 Pixelbild wird etwa die Hälfte der Breite des Bildschirms auf einem 1280 x 1024 Auflösung Monitor belegen.

Wenn jedoch die Druckausgabe 200 dpi wird es 3 Zoll besetzen, aber wenn es auf 300 dpi eingestellt ist es nur 2 Zoll besetzen.

Ich weiß nicht genug über das PDF-Format zu sagen, was Sie dies tun müssen, um zu arbeiten, aber meine Vermutung ist, dass Sie wieder von der physikalischen Größe auf dem Papier über die dpi des Ausgangs arbeiten müssen holen Sie sich die Größe in Pixeln des Bildes:

pixel width = physical width * dpi

Andere Tipps

Im Hinblick auf die GDI + Fehler Problem, versuchen, auf einem Memory Speichern Kopieren zuerst, dann, dass auf die Response.OutputStream. Wenn ein Tiff etwas wie ein PNG ist, wird der Strom in der Tat brauchen seekable zu sein.

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