Hallo Allerseits,
ich versuche mich gerade in einem Progrämmchen in dem ich Bitmaps aus Waveforms von Musiktiteln erzeuge und dann in einer Picturebox, der jeweiligen Position im Song passend, anzeigen lasse. Das sind in der Regel zwei Bitmaps, von zwei Titeln, die ich übereinander anzeigen lasse. Um die Waveform detailliert zu sehen, muss diese natürlich doch recht groß/lang als Bitmap gezeichnet werden, ich bin mit mir übereingekommen, pro 60s Musik,
2000 Pixel in der Bitmap-Length zu verwenden, damit die Waveforms die selben Proportionen erhalten. Das sind dann aber eben bei 4min 8000 Pixel lang, (8000x100). Der Picturebox Refresh/Invalidate erfolgt über einen Timer
mit 10ms Interval. Das funktioniert alles zufriedenstellend, aber ich stellte doch fest, dass bei längeren Titeln, wenn zwei Bitmaps in die Picturebox gezeichnet werden, es zu Verlangsamung von anderen grafischen Controls kommt.
Hier der Code des PB Paint Sub die ich per Timer aufrufe...
Ich hatte mit im Programm erzeugten Bitmaps noch nie viel zu tun, deshalb die Frage, gäbe es eine Ressourcenschonendere Methode, oder muss man damit leben bei so großen Grafiken?!
Die Bitmap als JPG abzuspeichern und die Picturebox auf 8000 zu vergrößern und deren Position passend nach links zu verschieben wird wohl auch kein Ansatz sein, da das ja nur Platz auf der Platte spart, zudem kann ich dann nicht zwei Waveforms übereinander anzeigen.
Für einen Hinweis wäre ich dankbar, falls jemand mit einem ähnlichen Problem Erfahrung hätte!
Schönes Wochenende
Ralph
ich versuche mich gerade in einem Progrämmchen in dem ich Bitmaps aus Waveforms von Musiktiteln erzeuge und dann in einer Picturebox, der jeweiligen Position im Song passend, anzeigen lasse. Das sind in der Regel zwei Bitmaps, von zwei Titeln, die ich übereinander anzeigen lasse. Um die Waveform detailliert zu sehen, muss diese natürlich doch recht groß/lang als Bitmap gezeichnet werden, ich bin mit mir übereingekommen, pro 60s Musik,
2000 Pixel in der Bitmap-Length zu verwenden, damit die Waveforms die selben Proportionen erhalten. Das sind dann aber eben bei 4min 8000 Pixel lang, (8000x100). Der Picturebox Refresh/Invalidate erfolgt über einen Timer
mit 10ms Interval. Das funktioniert alles zufriedenstellend, aber ich stellte doch fest, dass bei längeren Titeln, wenn zwei Bitmaps in die Picturebox gezeichnet werden, es zu Verlangsamung von anderen grafischen Controls kommt.
Hier der Code des PB Paint Sub die ich per Timer aufrufe...
VB.NET-Quellcode
- Private Sub PictureBoxMIX_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBoxMIX.Paint
- If btnAB = True Then
- If Not WaveImg1 Is Nothing Then
- e.Graphics.DrawImage(WaveImg1, New Point((akt_position) + (PictureBoxMIX.Width \ 2), 0))
- End If
- If Not WaveImg Is Nothing Then
- e.Graphics.DrawImage(WaveImg, New Point((akt_position) + (PictureBoxMIX.Width \ 2), 0))
- End If
- ElseIf btnAB = False Then
- If Not WaveImg Is Nothing Then
- e.Graphics.DrawImage(WaveImg, New Point(akt_position) + (PictureBoxMIX.Width \ 2), 0))
- End If
- If Not WaveImg1 Is Nothing Then
- e.Graphics.DrawImage(WaveImg1, New Point((akt_position) + (PictureBoxMIX.Width \ 2), 0))
- End if
- End If
- e.Graphics.DrawLine(New Pen(Brushes.White, 1), PictureBoxMIX.Width \ 2, 0, PictureBoxMIX.Width \ 2, Me.PictureBoxMIX.Height - 1)
- End Sub
Ich hatte mit im Programm erzeugten Bitmaps noch nie viel zu tun, deshalb die Frage, gäbe es eine Ressourcenschonendere Methode, oder muss man damit leben bei so großen Grafiken?!
Die Bitmap als JPG abzuspeichern und die Picturebox auf 8000 zu vergrößern und deren Position passend nach links zu verschieben wird wohl auch kein Ansatz sein, da das ja nur Platz auf der Platte spart, zudem kann ich dann nicht zwei Waveforms übereinander anzeigen.
Für einen Hinweis wäre ich dankbar, falls jemand mit einem ähnlichen Problem Erfahrung hätte!
Schönes Wochenende
Ralph