Hallo,
mein Mosaik-Bild-Programm läuft grundsätzlich (wenn auch erst rudimentär). Vorerst noch festgelegt für eine Auflösung 1600x900 mit 5x5 Bildteilen.
Allerdings kommt nach ca 1,5 Minuten der Fehler "nicht genügend Arbeitsspeicher". Ich nutze Windows7-64 Bit mit 16 GB RAM.
Ich bin davon ausgegangen, daß durch "Dispose" in Zeile 38 der Speicher immer wieder halbwegs freigegeben wird.
Was kann ich tun?
Gruß
Zerberus
mein Mosaik-Bild-Programm läuft grundsätzlich (wenn auch erst rudimentär). Vorerst noch festgelegt für eine Auflösung 1600x900 mit 5x5 Bildteilen.
Allerdings kommt nach ca 1,5 Minuten der Fehler "nicht genügend Arbeitsspeicher". Ich nutze Windows7-64 Bit mit 16 GB RAM.
Quellcode
- Public Class Form1
- Public TeilBilder(5, 5)
- Public TeilBilderSwap
- Public ZufallX As Integer
- Public ZufallY As Integer
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Timer1.Interval = 500
- Timer1.Enabled = True
- Me.Height = SystemInformation.PrimaryMonitorSize.Height
- Me.Width = SystemInformation.PrimaryMonitorSize.Width
- PictureBox1.Height = Me.Height
- PictureBox1.Width = Me.Width
- Me.Hide()
- System.Threading.Thread.Sleep(500)
- For iw = 0 To 1280 Step 320
- For ih = 0 To 720 Step 180
- Dim b As New Bitmap(320, 180)
- Graphics.FromImage(b).CopyFromScreen(New Point(iw, ih), New Point(0, 0), b.Size)
- TeilBilder(iw / 320, ih / 180) = b
- Next
- Next
- Me.Show()
- Me.Opacity = 0
- End Sub
- Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
- Dim c As New Bitmap(1600, 900)
- Graphics.FromImage(c).CopyFromScreen(New Point(0, 0), New Point(0, 0), c.Size)
- Randomize()
- ZufallX = CInt(Int(4 * Rnd()))
- ZufallY = CInt(Int(5 * Rnd()))
- Graphics.FromImage(c).DrawImage(TeilBilder(ZufallX, ZufallY), New Point(320 * (ZufallX + 1), 180 * ZufallY))
- Graphics.FromImage(c).DrawImage(TeilBilder(ZufallX + 1, ZufallY), New Point(320 * ZufallX, 180 * ZufallY))
- TeilBilderSwap = TeilBilder(ZufallX, ZufallY)
- TeilBilder(ZufallX, ZufallY) = TeilBilder(ZufallX + 1, ZufallY)
- TeilBilder(ZufallX + 1, ZufallY) = TeilBilderSwap
- PictureBox1.Image = c
- Me.Opacity = 1
- Graphics.FromImage(c).Dispose()
- End Sub
- Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
- If e.KeyCode = Keys.Escape Then
- Application.Exit()
- End If
- End Sub
- End Class
Ich bin davon ausgegangen, daß durch "Dispose" in Zeile 38 der Speicher immer wieder halbwegs freigegeben wird.
Was kann ich tun?
Gruß
Zerberus