Я пытаюсь изменить растровое изображение в вызове функции.
Без вызова функции я могу обойтись
'MyBitMap - an existing bitmap of what I want to modify
Using NewBitMap as BitMap = MyBitMap.Clone 'make copy
Dim G as Graphics = Graphics.FromImage(MyBitMap) 'Draw graphics to MyBitMap
G.Clear(color.white) 'Clear image
G.DrawImage(NewBitMap, -10, 0) 'Shift Image to left 10
PictureBox1.Image = MyBitMap
End Using
отлично работает без переполнения памяти или чего-либо еще
В сабе работает нормально
Sub BMScroll_S(BM as BitMap, dx as integer, dy as integer)
using BMtemp as BitMap = BM.Clone
Dim G as Graphics = Graphics.FromImage(BM)
G.Clear(color.white)
G.DrawImage(BMTemp, dx, dy)
End Using
End Sub
Call BMScroll_S(MyBitMap, -10, 0)
PictureBox1.Image = MyBitMap
работает нормально, но если я пытаюсь создать функцию, возвращающую растровое изображение
Function BMScroll_F(BM as BitMap, dx as integer, dy as integer) as Bitmap
BMScroll_F = New Bitmap(BM)
Using BMtemp As Bitmap = BM.Clone
Dim G As Graphics = Graphics.FromImage(BMScroll_F)
G.Clear(Color.White)
G.DrawImage(BMtemp, dx, dy)
BM.Dispose()
End Using
End Function
MyBitMap=BMScroll_F(MyBitMap, -10, 0)
PictureBox1.Image = MyBitMap
здесь у меня есть утечка памяти, и после все большего количества итераций она вылетает.
Я предполагаю, что при вызове функции вы возвращаете растровое изображение, а также тот факт, что битовые карты передаются ByRef, поэтому они будут продолжать существовать. Я думал, что BM.Dispose может избавиться от этого - но это не так. Я не совсем уверен, как решить мою утечку памяти (если это на самом деле из-за моего предположения). Конечно, я мог бы продолжить с подпрограммой, но я хотел бы знать, как решить эту проблему в любом случае. Любая помощь будет оценена.