Discussion:
WPF -> Image, PictureBox, ... Zeichnen in WPF
(zu alt für eine Antwort)
Stampede
2008-07-13 14:01:03 UTC
Permalink
Hallo,
ich bin neu bei WPF, habe jedoch viel Erfahrung mit .NET und C# bis .NET2.0.

Ich schreibe an einem Program, welches größere Datenmengen graphisch
aufbereitet. In .NET2.0 lief das mit einer PictureBox ja sehr gut, aber in
WPF komme ich mit dem Image und den Drawings irgendwie nicht zurecht. Die
Beispiele für fertige Bilder oder auch geometrische Formen sind ja sehr nett,
jedoch muss ich bei einer Fläche von ca. 480 * 50 Pixel, jedes Pixel in einer
bestimmten Farbe bemalen.

Hat jemand eine Idee bzw. einen Hinweis, wie ich das (wenn möglich halbwegs
performant) erledigen kann?

Und weiters habe ich noch eine Frage: Theoretisch müsste ich doch mittels
der DrawingGroup soetwas wie Layer realisieren können oder? Das ist jetzt ein
Schuss ins Blaue, aber ich wäre sehr für eine Hilfestellung dankbar. Ich muss
nämlich, wenn das "Hauptbild" (also die 480*50px) gemalt sind, noch weitere
Schichten darüber malen, die sich aber verändern können. Da das "Hauptbild"
aber gleich bleibt, würde ich selbiges gerne nur einmal zeichnen.

Ich hoffe wirklich, dass mir hier jemand weiterhelfen kann, da ich langsam
verzweifle.

Danke vielmals im Vorraus!

Florian
Frank Dzaebel
2008-07-14 06:13:25 UTC
Permalink
Hallo Florian,

pass mal Deinen Usernamen ggf. an.
Post by Stampede
jedoch muss ich bei einer Fläche von ca. 480 * 50 Pixel, jedes
Pixel in einer bestimmten Farbe bemalen.
Hat jemand eine Idee bzw. einen Hinweis, wie ich das (wenn
möglich halbwegs performant) erledigen kann?
Man zeichnet in WPF normal unabhängig von Pixeln des
Ausgabe-Gerätes, also vektororientiert.
Für Dinge wie DrawLine etc. wäre ggf. ein
[SnapsToDevicePixels = true] eine Möglichkeit:
http://forums.msdn.microsoft.com/en/wpf/thread/116c4801-895a-43bb-8974-086109965bdb/
Ggf. erstellt man ja auch eine Bitmap aus einem DrawingContext, die
man dann z.B. über ein Image darstellen lässt:

[Gewusst wie: Erstellen einer Bitmap mit einem visuellen Element]
http://msdn.microsoft.com/de-de/library/aa969775.aspx
Post by Stampede
Und weiters habe ich noch eine Frage: Theoretisch müsste ich doch mittels
der DrawingGroup soetwas wie Layer realisieren können oder?
Wenn Du Schichten übereinander malen willst/musst, dann kannst
Du doch z.B. einfach ein Canvas-Layoutelement nehmen
und die Positionen der einzelen Layer ggf. überlappend machen.
Das *letzte* Element im XAML wird auch als letzte gezeichnet,
überdeckt also die Elemente davor.
Für Opacity/OpacityMask also Durchsichtigkeit der Layer ggf.:

[Übersicht über das Grafikrendering in Windows Presentation Foundation]
http://msdn.microsoft.com/de-de/library/ms748373.aspx


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Thomas Scheidegger
2008-07-14 08:52:10 UTC
Permalink
Hallo Florian
ca. 480 * 50 Pixel, jedes Pixel in einer bestimmten Farbe bemalen.
...(wenn möglich halbwegs performant)
hier uU alternative Low-Level-Lösungen prüfen wie in Richtung (ohne Gewähr):

BitmapSource.Create
<URL:http://www.interact-sw.co.uk/iangblog/2006/03/10/wpfrawpixels>

InteropBitmap [CreateBitmapSourceFromMemorySection]
<URL:http://blogs.microsoft.co.il/blogs/tamir/archive/2008/03/02/how-to-high-performance-graphics-in-wpf.aspx>

WriteableBitmap (in aktuellen Versionen mit Vorbehalt)
<URL:http://blogs.msdn.com/jgalasyn/archive/2008/04/17/using-writeablebitmap-to-display-a-procedural-texture.aspx>
--
Thomas Scheidegger - 'NETMaster'
http://dnetmaster.net/
Loading...