Ciao a tutti spero gli illuminati possano portare un pò di luce anche in questa situazione.
Situazione :
carico in una picturebox un immagine BMP con dimensioni non indifferenti 56 Mb circa.
Tramite questo codice (trovato in giro) effettuo una rotazione avendo fissato come valori un range abbastanza piccolo (da -5 a +5 , partendo da centrata verso destra e verso sinistra)
originale è la picturebox contenente l'immagine caricata dal file.
Try
Dim bm_in As New Bitmap(originale.Image)
Dim wid As Single = bm_in.Width
Dim hgt As Single = bm_in.Height
Dim corners As Point() = {
New Point(0, 0),
New Point(wid, 0),
New Point(0, hgt),
New Point(wid, hgt)}
Dim cx As Single = wid / 2
Dim cy As Single = hgt / 2
Dim i As Long
For i = 0 To 3
corners(i).X -= cx
corners(i).Y -= cy
Next i
Dim theta As Single = Single.Parse(HScrollBar1.Value.ToString) * PI / 180.0
Dim sin_theta As Single = Sin(theta)
Dim cos_theta As Single = Cos(theta)
Dim X As Single
Dim Y As Single
For i = 0 To 3
X = corners(i).X
Y = corners(i).Y
corners(i).X = X * cos_theta + Y * sin_theta
corners(i).Y = -X * sin_theta + Y * cos_theta
Next i
Dim xmin As Single = corners(0).X
Dim ymin As Single = corners(0).Y
For i = 1 To 3
If xmin > corners(i).X Then xmin = corners(i).X
If ymin > corners(i).Y Then ymin = corners(i).Y
Next i
For i = 0 To 3
corners(i).X -= xmin
corners(i).Y -= ymin
Next i
Dim bm_out As New Bitmap(CInt(-2 * xmin), CInt(-2 * ymin))
Dim gr_out As Graphics = Graphics.FromImage(bm_out)
ReDim Preserve corners(2)
gr_out.DrawImage(bm_in, corners)
If Not picDest.Image Is Nothing Then
picDest.Image.Dispose()
End If
picDest.Image = bm_out
Catch ex As Exception
MsgBox("Si è verificato un errore durante l'elaborazione dell'immagine : "& ex.Message)
End Try
naturalmente l'immagine in uscita viene impostata su picDest(un altra picturebox)
Ho provato a piazzare un dispose prima di 'reimpostare' l'immagine in picDest prima che venga nuovamente ruotata in un senso o nell'altro. Scorrendo la barra 'hscroll1' che assegna il valore di rotazione da -5 a 5, solo dopo diverse volte (alcune volte anche una ventina) ricevo l'errore 'parametro non valido' e poi 'memoria insufficiente' altre volte invece solo l'errore 'memoria insufficiente'.
Potreste darmi un mano a trovare l'errore ? o semplicemente immagini di una certa dimensione non andrebbero utilizzate ?
Non capisco perchè se caricata l'immagine la prima volta e avendo piazzato picDest.image.dispose dopo un pò di volte si presenta questo errore.
Spero in un suggerimento e come sempre grazie mille.