| 

.NET C# Java Javascript Exception

3
Ohne lange Geschichten die Sache ist die: ich habe ein Control zum Zeichnen von Bildern. Der Inhalt (bzw. einzelne Bilder) lässt sich mit der Maus verschieben. Leider ist das sehr langsam denn alles wird via GDI+, also per Software, gerendert. Das Zeichnen von Bildern wollte ich mithilfe von Direct2D beschleunigen (ein C++/CLI wrapper kümmert sich darum), was mir teilweise gelungen ist.

In dem Control werden neben den Bildern noch andere Elemente gezeichnet und hier kommt das eigentliche Problem. Ich weiss nicht wie ich GDI+ Aufrufe mit Direct2D Aufrufen kombiniere weil im Moment überschreibt eine das andere, d.h. dass ich etweder nur GDI+ benutzen kann oder nur Direct2D sonst wird alles was zuvor gemalt wurde duch Direct2D gelöscht oder umgekehrt.

Der Direct2D Wrapper nutzt die Schnittstelle IDCRenderTarget und die DrawBitmap Funktion.

Hätte jemand einen Rat wie ich die beiden zwingen kann sich zu vertragen?

Programmierumgebung: .NET v4.0, Direct2D, GDI+, C#, C++/CLI, VS2010, WIN7

EDIT: neue Erkenntnisse:

in einer kleinen Testapplikation kann ich ein Bild zu erst zeichnen und dadrauf Ellipsen und Rechtecke etc. aber sobald ich die Fenstergröße ändere verdeckt das durch Direct2D-gezeichnete-Bild alles andere.

EDIT2: gelöst?

ich denke ich habe das Rätsel selbst gelöst. Diese Zeile war schuldig, dass es nicht funktionierte:
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

nachdem ich sie auskommentiert habe, wird nichts mehr verdeckt

EDIT3:

ich habe mich zuvoreillig gefreut. ohne OptimizedDoubleBuffer flackert alles, was mit GDI+ gezeichnet wurde.
20.03.2011
pinchbeck 373 1 8
2 Antworten
1
Grundsätzlich kannst Du GDI+ nicht mit anderen Ausgabeen vereinen (noch nicht mal GDI arbeitet sauber mit GDI+ zusammen). Da könntest Du genauso gut versuchen, DirectX mit OpenGL zu mischen.

Ich gestatte mir daher mal einen Rat:

Wenn Du Dir mal überlegst, wie viel Zeit Du investiert, um Dein Ziel über GDI+ zu erreichen, ist es da nicht sinnvoller, ganz darauf zu verzichten? Ich kenne keine Details zu Deinem Programm, aber die Mausereignisse für das Verschieben eines Bildes erhältst Du unabhängig von den verwendeten Zeichenroutinen. Warum verschiebst Du ein Bild nicht direkt mit DirectX-Mitteln? Ich denke, das ist am Ende einfacher.
21.03.2011
Andreas Ganzer 1,4k 1 8
0
das könnte ich mir auch vorstellen, nur mit Direct2D zu arbeiten... wenn ich bloß wüsste wie ich das Picken löse. ich konnte bisher nichts vergleichbares zu GraphicsPath.IsVisible finden, was ich jetzt zum Picken verwende. oder ist das Picken im Direct2D garnicht vorgesen und man muss es immer mit GDI bzw. GDI+ machen, mhmm?
21.03.2011
pinchbeck 373 1 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH