![]() |
schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
hi,
zur Zeit Zeichne ich meine Bitmaps sind ca. 100-200 auf ein Canvas mit canvas.Draw(x,y,bitamp) Nur wenn ich 100 Bitmaps zeichnen muss, ist die cpu bei 100%. Bin also auf der suche nach einer Methode die etwas schneller ist. Die Bitmaps können verschoben werden und sind in einer liste vorhanden die ich mit einer for schleife durchgehe. Hatte damals schon mal mit opengl gearbeitet. Müste mich aber wieder komplett einarbeiten...... Was meint ihr? |
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
Von der Performance ist OpenGL oder DirectX auf jeden Fall besser.
|
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
Du kannst mal schauen, ob
![]() |
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
Zitat:
|
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
Zitat:
|
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
Zitat:
|
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
dann habe ich was falsch gemacht....
|
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
Also wenn Du auf GDI umstellst müsstest du um einiges schneller werden. Der beste Weg IMHO. Zuerst einen CreateCompatibleDC einen Memory-DC holen , dann mit BitBlt alles in den Memory-DC blitten und den zum Abschluß einmalig auf den Canvas, das sollte mehr als den Faktor 20 bringen!
|
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
habe es jetzt geändert. Soweit so gut, bei 100 Objekten ist die cpu bei 70-75%
Das ist mir leider noch zu viel. Da werde ich wohl oder übel auf opengl umsteigen..... |
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
Ich habe eine Anwendung entwickelt welche mit BitBlt und z.T. auch Draw über tausend Objekte auf dem Form Canvas malt und habe gar keine Probleme und vor allem keine CPU Last. Ich nutze dabei aber
![]() ![]() ![]() ![]() |
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
Mit Andorra würdest du einfach alles in eine TAdImageList laden und dann per Draw zeichnen. Nicht viel aufwendiger aber wahlweiße DirectX oder OpenGL beschleunigt.
|
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
GDI: Die Geschwindigkeit ist unterschiedlich. Das kommt ganz darauf an ob die Grafikkarte mit zur Beschleunigung genutzt wird oder nicht. Wenn du ein TBitmap erstellst dann solltest du in jedem Falle den HandleType auf bmDDB stellen. Dadurch weißt du der GDI mit vorhandene Hardware benutzen zu dürfen. Wenn der auf bmDIB steht dann läuft alles auf der CPU ab. Ein frisch geladenes Bit steht auf bmDIB.
PS: Den HandleType natürlich erst dann setzen wenn das Bitmap komplett geladen ist. Also fertig zum zeichnen. Ansonsten wird der womöglich wieder zurückgesetzt. PPS: Wenn du auf die Scanlines zugreifen möchtest darfst du bmDDB nicht verwenden. Da dadurch die Scanlines nicht verfügbar sind. Du kannst es aber auch kurzzeitig umstellen. |
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
Zitat:
Meine App arbeitet in der gesamten Firma auf den unterschiedlichsten Rechnern und Betriebssystem und genauso Auflösungen und unterschiedlichen Farbtiefen immer ohne flackern oder Verzögerungen. Selbst ein PII muckt nicht rum... Zitat:
|
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
Zitat:
|
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
Muetze1: Was Palettenbilder angeht muss ich gänzlich passen. Ich arbeite aussließlich mit 24 oder 32 Bit Bildern/Farbtiefen. Und dort wo ich es bisher eingesetzt habe darf man so etwas auch erwarten. Von daher kann ich dazu gar nichts sagen.
Hardwarebeschleunigung: Was genau alles beschleunigt wird liegt voll und ganz in den Händen des Treibers. Da stimmen wir beide ja überein. Ob DIBs jetzt wirklich nur auf der CPU ausgeführt werden kann ich mit Gewissheit nicht sagen, da ich mich bisher nie so genau damit beschäftigt habe was unten drunter passiert. Allerdings habe ich damit schon sehr viele Tests gemacht und diese sprechen eindeutig dafür, dass (auf meinen bisherigen Systemen) die DDBs das gegünstigtere Format waren. 1. Versuch mal bei ein DDB eine entsprechend große Größe einzustellen. Ab einer gewissen Größe bekommst du gnadenlos nur noch Out Of Resurce Exceptions. Wärend ein DIB nur von dem verfügbaren RAM begrenzt werden. Zusätzlich dazu kann man an der Auslastung des Speichers der Anwendung gut sehen, dass sich DDBs so gut wie gar nicht bemerkbar machen. DIB hingegen vollkommen. 2. Einfacher Geschwindigkeittest. Das Zeichnen von 1000 256x256 Bitmaps (immer das selbe) auf einer 800x600 Fläche. Inklusive Bliten der Fläche auf einem Formular. Allerdings alles OHNE direkte GDI und unter der Vorraussetzung, dass der Treiber es beschleunigt. Beide Bilder DDB = 11 ms Beide Bilder DIB = 380 ms In der Delphihilfe wird von geräteabhängigen (DDB) und geräteunabhängigen (DIB) Bitmaps gesprochen. Ich denke mal diese Beschreibung trifft es besser (eigentlich benutze ich auch immer das). Laut OH sind DIBs auch wesentlich kompatibler was sich aber in einer langsameren Geschwindigkeit äußert. |
Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 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-2025 by Thomas Breitkreuz