Beibehaltung von Bitmap-Werten beim Erstellen einer neuen Bitmap aus System.Drawing.Image

8

Ich versuche ein skaliertes Bild aus einer Bitmap zu erstellen, setze eine neue Höhe / Breite und eine neue Auflösung und speichere es in PNG. Ich kann dies entweder direkt von A) Image.FromFile(filename) oder B) New Bitmap(imageSource) tun, um die A Bitmap zu erstellen, die an B <übergeben wird / em> . Beide funktionieren okay schmokay, aber A erlaubt mir nicht, eine neue Breite / Höhe bei der Erstellung festzulegen (aber ich kann Werte mit useIcm=True beibehalten) und < strong> B erlaubt mir nicht, Werte zu speichern.

Okay, jetzt zu etwas Code und Beispielen:

  1. Dim sourceBitmap As New Bitmap(imagePath & myImage1Name) & lt; -nicht gut (# 1 Überlastung). Konserviert nicht Dinge wie HorizontalResolution oder PixelFormat auf .Save

  2. Dim sourceBitmap2 As Bitmap = Image.FromFile(imagePath & myImage1Name, True) & lt; -nicht gut (# 5 Überladung). es tut Dinge bewahren wie HorizontalResolution oder PixelFormat auf .Save , aber es Mit nicht kann ich das Bild in einer neuen Größe initialisieren.

  3. Dim targetBitmap As New Bitmap(sourceBitmap2, newWidth, newHeight) & lt; -nicht gut. Obwohl sourceBitmap2 (siehe # 2 oben) war initialisiert mit useIcm=True , it Es spielt keine Rolle, wenn ich es einmal passiert habe als Quelle in targetBitmap .

Im Grunde suche ich nach einer Möglichkeit, eine neue Bitmap zu konstruieren, wobei sowohl useIcm=True als auch die Breite / Höhe gleichzeitig festlegen ( Width / Height sind) schreibgeschützte Eigenschaften, sobald sie erstellt wurden.

Ich habe auch die Graphics.DrawImage Route heruntergefahren und es ist dasselbe - Graphics.FromImage(sourceBitmap) behält keine Werte.

Warum müssen diese Werte beibehalten werden? Weil ich diese Bilder in PNG (für die Dateigröße) mit einer neuen Auflösung konvertieren muss und die gleichen physischen Abmessungen (w / h in Zoll) für den Druck behalten soll. Ich kenne die neue Pixelbreite / -höhe, die benötigt wird, basierend auf den Auflösungswerten, die ich mit .SetResolution(xDpi,yDpi) übergebe, um die physischen Abmessungen zu erhalten, also ist das nicht das Problem. Das Problem ist, dass die PixelFormatSize unverändert bleiben müssen (ja, ich habe EncoderParameters ausprobiert - sie funktionieren nicht. Ich kann dir die blutigen Details geben, wenn du magst, aber es genügt, sie vorerst zu sagen, sie einfach nicht funktionieren).

Puh, hat das von meiner Brust genommen! Okay, jeder, der wirklich weiß, wie das alles funktioniert, kann helfen?

BEARBEITEN : Dateitypen, die zum Konvertieren in PNG benötigt werden: BMP, TIF, GIF, WMF, EMF.

    
Todd Main 15.05.2010, 05:12
quelle

2 Antworten

3

Warum nicht einfach Dim targetBitmap As New Bitmap(Image.FromFile(imagePath & myImage1Name, True), newWidth, newHeight) ?

    
Stan 04.06.2010, 21:40
quelle
3

Wie wäre es mit etwas wie dem folgenden Code: Sie können die Bitmap auf einem NEWGraphic zeichnen. Sie können dann mit der Größe umgehen, wenn Sie es neu zeichnen.

%Vor%     
pehaada 24.05.2010 21:00
quelle

Tags und Links