Hallo,
ich habe eine relativ komplexe funktion, die mir Bilder umwandelt. Dazu werden große Bilder geladen und in verschidene andere Formate umgewandelt und abgespeichert. Im Rahmen einer Optimierung wurde der Code geändert und ich lese die Bilder jetzt aus MemoryStream statt dem umweg über die lokale Platte. Soweit so gut. Komischerweise verändert sich das Bild - ohne dass die Variable im Code verwendet wird.
Hier mal der Code:
Es wird ein Bild von einer URL geladen in StreamBild. Dann werden zwei funktionen aufgerufen, die jeweils ein Bild 120 und 600 erstellen sollen.
Dim StreamBild As Image = Nothing
Dim wc As New Net.WebClient()
Using stream As New IO.MemoryStream(wc.DownloadData(DR("SourceUrl").ToString))
StreamBild = Image.FromStream(stream)
End Using
If StreamBild IsNot Nothing Then
Using myimage As Bitmap = StreamBild
'Bild 120
imageConvert(myimage, 120, 120, Imaging.ImageFormat.Jpeg, Dateiname, _
False, False, 120, 120)
'Bild600
ImageConvert(myimage, 300, 300, Imaging.ImageFormat.Jpeg, Dateiname600, _
False, False, 300, 300)
End Using
End If Das Komische ist, dass die erste ImageConvert das Bild in 120x120 erstellt. Beim Aufruf des Bild600 ist myimage nothing
Public Sub imageConvert(ByVal ConvertBild As Bitmap, ByVal nWidth As Integer, _
ByVal nHeight As Integer, ByVal nFormat As ImageFormat, ByVal sNewFile As _
String, Optional ByVal CropImage As Boolean = False, Optional ByVal _
RotateImage As Boolean = True, Optional ByVal fixWidth As Integer = 0, _
Optional ByVal fixHeight As Integer = 0)
' Neues Bild-Objekt in der neu berechneten Breite und Höhe erstellen
Using neuesBild As Bitmap = ConvertBild
'---- Bild auf die Festgelegte Höhe und Breite bringen ----
If System.IO.File.Exists(sNewFile) Then System.IO.File.Delete(sNewFile)
Dim NewPosY As Integer = 0, NewPosX As Integer = 0
If fixHeight > neuesBild.Height Then NewPosY = CInt((fixHeight - _
neuesBild.Height) / 2)
If fixWidth > neuesBild.Width Then NewPosX = CInt((fixWidth - _
neuesBild.Width) / 2)
Using fixBmp As Bitmap = New Bitmap(fixWidth, fixHeight, _
PixelFormat.Format32bppArgb)
Using g As Drawing.Graphics = Graphics.FromImage(fixBmp)
g.Clear(Color.White)
g.SmoothingMode = SmoothingMode.HighQuality
g.CompositingQuality = CompositingQuality.HighQuality
g.InterpolationMode = InterpolationMode.High
g.DrawImage(neuesBild, New RectangleF(NewPosX, NewPosY, _
neuesBild.Width, neuesBild.Height), New RectangleF(0, 0, _
neuesBild.Width, neuesBild.Height), GraphicsUnit.Pixel)
fixBmp.Save(sNewFile, nFormat)
End Using
End Using
End Using
End Sub Die Funktion imageConvert (war eine Funtion, habe ich jetzt in eine Sub umgewandelt zum test) verändert die Ursprungsvariable nicht. Dennoch ist nach dem Ausführen der Sub die Ursprüngliche Variable nothing
Wer kann mir erklären, was hier passiert?
Joachim |