Hi
Ich habe mir ein kleines Tool geschrieben, mit dem ich Bilder Zuschneiden kann. Das klappt zwar soweit ganz gut, aber .Net schmeisst leider alle möglichen Eigenschaften des Originalbildes einfach weg und nimmt stattdessen Standardwerte.
Sei es die DPI Zahl, Komprimierung oder was auch immer.
Wie kann ich denn ganz pauschal alle Eigenschaften Kopieren/Beibehalten?
zZ gehe ich hin, rechne mir aus wie Gross das Rechteck sein muss das ich brauche zum korrekten Zuschneiden und gebe das Zurück
Overloads Function CopyBitmap(ByVal source As Bitmap, ByVal part As Rectangle) _
As Bitmap
Dim bmp As New Bitmap(
part.Width, part.Height)
bmp.SetResolution(source.HorizontalResolution, _
source.VerticalResolution)
bmp.Palette = source.Palette
Dim g As Graphics = Graphics.FromImage(bmp)
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
g.DrawImage(source, 0, 0, part, GraphicsUnit.Pixel)
g.Dispose()
bmp = bmp.Clone(New Rectangle(0, 0, bmp.Width, bmp.Height), _
source.PixelFormat)
Return bmp
End Function Speicher ich dieses Bild, hinterlässt es mir allerdings etwas komplett anderes, als was ich da ursprünglich reingegeben habe.
Da sind dann die DPI weg, Farbpalette etc etc.
Das kann ich grösstenteils kopieren indem ich sowas mache:
'Encoder Einstellen um das Bild wieder als richtiges Tiff speichern zu können
'Dim EnCodeFormat As ImageFormat = New ImageFormat(New Guid(
' "b96b3cb1-0728-11d3-9d7b-0000f81ef32e"))
Dim myImageCodecInfo As ImageCodecInfo
Dim myEncoder As Encoder
Dim myEncoderParameter As EncoderParameter
Dim myEncoderParameters As EncoderParameters
' Create a Bitmap object based on a BMP file.
' Get an ImageCodecInfo object that represents the TIFF
' codec.
myImageCodecInfo = GetEncoderInfo( _
img.RawFormat.Guid.ToString)
myEncoder = Encoder.Compression
myEncoderParameters = New EncoderParameters(1)
myEncoderParameter = New EncoderParameter(myEncoder, _
Fix(EncoderValue.CompressionNone))
myEncoderParameters.Param(0) = myEncoderParameter
'Und speichern
CutImage.Save(path & GetFileName(file), myImageCodecInfo, myEncoderParameters) Sogar hier versaut .Net es wieder und schmeisst mir die davor eingestellte ( bmp.SetResolution(source.HorizontalResolution, source.VerticalResolution) ) DPI Zahl wieder weg und macht da z.B anstatt 600x600 ein 300x300 rein. Muss ich hier also auch nochmal Festlegen indem ich noch ein "CutImage.SetResolution(img.HorizontalResolution, img.VerticalResolution)" mache.
Gibt es denn keine Möglichkeit einfach alles so zu belassen wie es ist und einfach nur das Gewünschte Rechteck auszuschneiden? Oder zumindest Zuverlässig alle Eigenschaften zu kopieren?
zZ produziert mir das Tool ein deutlich kleineres ( Dateigrösse ) Bild mit deutlich schlechterer Qualität: http://quloa.de/testimages.zip
[EDIT] Ursprünglich Falsches Bild im zip gehabt ... korrigiert[/EDIT]
Mfg Sea
Beitrag wurde zuletzt am 03.08.11 um 09:36:00 editiert. |