![]() |
Bitmap erstellen und mit Direct2D zeichnen
Hallo
ich suche eine Lösung um ein Bitmap zu erstellen und mit Direct2D zu zeichnen. Gibt es eine wirklich schnelle Lösung dafür? 100+ Bilder pro Sekunde wären nice. Momentan mach ich das ganz einfach, kriege aber nicht viele Bilder. Ich nehme ein Bitmap nehme 2 For schleifen, nehme jedes Pixel und zeichne es mit Direct2D. Ihr könnt euch bestimmt vorstellen wie langsam das ist... MfG |
AW: Bitmap erstellen und mit Direct2D zeichnen
Schau doch mal unter Samples\Delphi\Vcl\Direct2D.
|
AW: Bitmap erstellen und mit Direct2D zeichnen
Zitat:
|
AW: Bitmap erstellen und mit Direct2D zeichnen
Danke für den Tipp mit ScanLine. Habe ne weile gebraucht bis ich es verstanden habe, aber habe es endlich hingekriegt einen brauchbaren Test zu machen. :D
Werde bald die Pixels variante mit der ScanLine variante umtauschen, mal sehen was sich an der Performance verändert ^^ MfG |
AW: Bitmap erstellen und mit Direct2D zeichnen
Handelt es sich denn bei jedem Frame um ein neu generiertes Bitmap?
Dann ist hier der Flaschenhals! Das Darstellen des immer gleichen Bitmaps geht auch mit mehr als 100 FPS, je nach Grafikhardware und Größe des Bitmaps. Wenn du magst, kannst du ja mal ein kleines Beispielprojekt anhängen! |
AW: Bitmap erstellen und mit Direct2D zeichnen
Liste der Anhänge anzeigen (Anzahl: 2)
Hab mal ein kleines Testprojekt erstellt um die Performance von ScanLine mit der von Pixels zu vergleichen.
Ich glaube jedoch ich mache was falsch, da die Performance nur minimal besser ist :/ Habe das Projekt in eine Zip gepackt und hochgeladen. Das kompilat ist nicht in der Zip da sie sonst zu gross gewesen wäre um sie hier hochzuladen. Im "Debug" Ordner habe ich 5 Bilder in verschiedenen Auflösungen reingetan. Edit: Der Code wurde schnell geschrieben und wird später nicht mehr gebraucht. Ist nur für Testzwecke gedacht. Edit2: Ja die Bitmaps werden ein mal geladen und werden nicht (bzw. sehr selten) während der Laufzeit verändert werden aber an verschiedenen Positionen angezeigt. Edit3: In diesem Beitrag ist leider eine falsche version des Projekts ^^ Weiter unten ist die richtige |
AW: Bitmap erstellen und mit Direct2D zeichnen
Die Funktionen des angehängten Projekts sind leer.
Delphi-Quellcode:
procedure TForm1.DrawPixels;
begin end; procedure TForm1.DrawScanLine; begin end; |
AW: Bitmap erstellen und mit Direct2D zeichnen
Liste der Anhänge anzeigen (Anzahl: 1)
Oh lol, da hab ich wohl ernsthaft vergessen abzuspeichern bevor ich es gepackt habe :stupid:
Danke fürs melden ^^ |
AW: Bitmap erstellen und mit Direct2D zeichnen
Was willst du eigentlich machen? Das wird aus deinem Code irgendwie nicht ersichtlich.
In dem Code lädst du eine Bitmap und zeichnest sie Pixel für Pixel über TDirect2DCanvas auf die Form, mit beiden Funktionen. Du könntest zB auch mit ![]() |
AW: Bitmap erstellen und mit Direct2D zeichnen
Das ist ja mal wirklich gruselig! Pixel für Pixel! :shock:
Hier mal ein kleiner Ansatz, wie es schneller geht. Da ist aber noch Luft nach oben.
Delphi-Quellcode:
procedure TForm1.Loop(CountTo: integer);
var c : integer; begin c := 0; while c < CountTo do begin Invalidate; Application.ProcessMessages; inc(c); if c mod 10 = 0 then edit1.Text := inttostr(c); end; edit1.Text := 'done'; end; procedure TForm1.WMPaint(var Message: TWMPaint); var PaintStruct: TPaintStruct; begin BeginPaint(Handle, PaintStruct); try FCanvas.BeginDraw; try FCanvas.StretchDraw(ClientRect, FBitmap); finally FCanvas.EndDraw; end; finally EndPaint(Handle, PaintStruct); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz