Ich versuche, ein Bild in der Größe von einer Bitmap zu erstellen, eine neue Höhe/Breite und eine neue Auflösung festzulegen und in PNG zu speichern. Ich kann dies entweder von direkt A) Image.FromFile(filename)
oder B) New Bitmap(imageSource)
die die Ein Bitmap zu erstellen, um B weitergegeben werden. Beide arbeiten in Ordnung schmokay, aber A mir nicht erlauben, eine neue Breite/Höhe zu setzen bei der Erstellung (aber es erlaubt mir Werte mit useIcm=True
zu erhalten) und B mir nicht erlauben Werten preseve.Beibehaltung der Bitmap-Werte beim Erstellen einer neuen Bitmap aus System.Drawing.Image
Okay, nun an einigen Code und Beispiele:
Dim sourceBitmap As New Bitmap(imagePath & myImage1Name)
< -keine gut auf allen (# 1 Überlast). Nicht beibehalten Dinge wieHorizontalResolution
oderPixelFormat
auf.Save
Dim sourceBitmap2 As Bitmap = Image.FromFile(imagePath & myImage1Name, True)
< -keine gut (# 5 Überlast). es tut Dinge bewahren wieHorizontalResolution
oderPixelFormat
auf.Save
, aber es nicht erlauben Sie mir Bild mit einer neuen Größe zu initialisieren.Dim targetBitmap As New Bitmap(sourceBitmap2, newWidth, newHeight)
< -nicht gut. ObwohlsourceBitmap2
(siehe # 2 oben) war mituseIcm=True
initialisiert, es nicht einmal egal, ich habe es übergeben in als Quelle intargetBitmap
.
Grundsätzlich bin ich nach einer Möglichkeit, sowohl mit etwas eine neue Bitmap contruct wie useIcm=True
und Legen Sie die Breite/Höhe zur gleichen Zeit (Width
/Height
sind schreibgeschützte Eigenschaften, sobald sie erstellt wird) .
Ich bin die Graphics.DrawImage
Route auch runtergegangen und es ist das gleiche - Graphics.FromImage(sourceBitmap)
behält keine Werte.
Warum müssen diese Werte beibehalten werden? Weil ich diese Bilder in PNG (für Dateigröße) mit einer neuen Auflösung umwandeln muss und die gleichen physischen Maße (w/h in Zoll) für das Drucken behalten muss. Ich kenne die neue Pixelbreite/-höhe, die benötigt wird, basierend auf den Auflösungswerten, die ich mit .SetResolution(xDpi,yDpi)
übergeben werde, um physische Abmessungen zu erhalten, so dass das nicht das Problem ist. Das Problem ist, Dinge wie die PixelFormatSize
müssen unverändert bleiben (ja, ich habe versucht EncoderParameters
- sie funktionieren nicht. Ich kann Ihnen die blutigen Details geben, wenn Sie möchten, aber es genügt zu sagen, sie tun es einfach nicht Arbeit).
Puh, das hab ich kaputt! Okay, wer weiß wirklich wie das alles funktioniert?
EDIT: Dateitypen benötigt, um in PNG konvertieren: BMP, TIF, GIF, WMF, EMF.
Reflektor kann Ihr Freund hier sein. Sie können möglicherweise eine genaue Kombination aus Konstruktor und API ermitteln, die Ihnen das liefert, was Sie möchten. –
Danke Mark. Reflector kenne ich nicht, aber ich schaue nach. Klingt vielversprechend. –