Autor Beitrag
Leto
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

XP
D7 Enterprise
BeitragVerfasst: Do 10.08.06 18:09 
Hallo, meine erste Frage in der Welt von c# und .NET.
Meine Suche ergab kein Ergebnis, daher hier die Frage:

In einer Anwendung wird ein größeres Bild im Backbuffer verwaltet, etwa 8000x6000 Pixel, also größer als der Bildschrim. Auf der Zeichenfläche (eine PictureBox) soll es nun entsrechend dem sichtbaren Ausschnitt bei Gelegenheit angezeigt werden (bsp. Benutzer benutzt die umschliesenden Scrollbalken). Das Problem ist nur, dass DrawImage mir mieserable Ergebnisse hinsicht Laufzeit bietet.

Wie kann ich schneller das Bild zeichnen?

Bisheriger Code im Paint-Ereignis des PictureBox:

ausblenden Quelltext
1:
e.Graphics.DrawImage(backbuffer, 0, 0, new Rectangle(scrollbar1.Value, scrollbar2.Value, pictureBox1.Width, pictureBox1.Height), GraphicsUnit.Pixel);					


PS: Unter Delphi hätte ich BitBlt genutzt, aber gibt es nicht eine .NET native Lösung?

_________________
Carpe Noctem
Neidhard von Reuental
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 268

XP
BDS 2006 Prof
BeitragVerfasst: Do 10.08.06 22:09 
Ich versteh nich so richtig den Sinn des Ganzen.
Warum zeigst Du nicht einfach das ganze Bild in der PictureBox in Originalgröße?

_________________
Signaturen sind hier sinnlos!
Leto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

XP
D7 Enterprise
BeitragVerfasst: Fr 11.08.06 09:55 
Das Bild ist sehr groß und in dieser Größe soll es betrachtet werden. Das Forum wird ja (vertikal) auch nicht auf den verfügbaren Bilschirmplatz gepresst, sondern zeigt eine Bildlaufleiste, um einen anderen Ausschnitt darszustellen.

Das Bild ist darüberhinaus im Backbuffer, weil auf der Karte vorher Zeichenoperationen stattfinden und ich Doublebuffering nutze.

_________________
Carpe Noctem
Neidhard von Reuental
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 268

XP
BDS 2006 Prof
BeitragVerfasst: Fr 11.08.06 14:27 
Wie oft wird denn auf die Grafik gezeichnet? Wenn es nur zu Begin ist, kannst Du es doch trotzdem in einer PictureBox anzeigen.
Die PictureBox selber besitzt ja keine Scrollbalken, wahrscheinlich willst Du deswegen das Neuzeichnen übernehmen. Ist aber völlig unnötig.
Um Scrollbalken für eine PictureBox zu bekommen packt man die PictureBox einfach in ein Panel und stellt in der PictureBox-Eigenschaft auf AutoSize. Das Panel übernimmt dadurch die Anzeige und Funtion der Scrollbalken.

_________________
Signaturen sind hier sinnlos!
Leto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

XP
D7 Enterprise
BeitragVerfasst: Fr 11.08.06 23:43 
Es wird sehr häufig etwas darauf gezeichnet (und vor allem in abhängig des Kontext auch was anderes natürlich). Aber ich sehe schon, dass ich den Mechanismus unterschätzt habe. Wenn ich die Hintergrundgrafik wie oben beschrieben gleich zu Beginn verankere und dann nur die die notwendigen zeichenoperationen im onPaint() durchführe, klappt es auch, ganz ohne Backbuffer.

Nichtsdestotrotz ist auch die interne Zeichen-Lösung durch die Combo PaintBox und Panel mit Scrollbalken nicht wirklich geschwind...

_________________
Carpe Noctem