Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi schnelle Zeichen Routinen. Zur Zeit Canvas.Draw (https://www.delphipraxis.net/101501-schnelle-zeichen-routinen-zur-zeit-canvas-draw.html)

Jackie1983 14. Okt 2007 14:22


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?

mkinzler 14. Okt 2007 14:23

Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
 
Von der Performance ist OpenGL oder DirectX auf jeden Fall besser.

Apollonius 14. Okt 2007 14:25

Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
 
Du kannst mal schauen, ob MSDN-Library durchsuchenBitBlt schneller ist. Für die DCs musst du Canvas.Handle und Bitmap.Canvas.Handle einsetzen.

Jackie1983 14. Okt 2007 15:06

Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
 
Zitat:

Zitat von Apollonius
Du kannst mal schauen, ob MSDN-Library durchsuchenBitBlt schneller ist. Für die DCs musst du Canvas.Handle und Bitmap.Canvas.Handle einsetzen.

leider nicht die methode ist noch langsamer wie jetzt.........

Jackie1983 14. Okt 2007 15:07

Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
 
Zitat:

Zitat von mkinzler
Von der Performance ist OpenGL oder DirectX auf jeden Fall besser.

dann werde ich mich wohl oder übel wieder mit opengl beschäftigen.....

OlafSt 15. Okt 2007 14:25

Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
 
Zitat:

Zitat von Jackie1983
Zitat:

Zitat von Apollonius
Du kannst mal schauen, ob MSDN-Library durchsuchenBitBlt schneller ist. Für die DCs musst du Canvas.Handle und Bitmap.Canvas.Handle einsetzen.

leider nicht die methode ist noch langsamer wie jetzt.........

Das wundert mich jetzt... Ich habe BitBlt eingesetzt, um Canvas.Draw loszuwerden, denn Bitblt war Faktor 20 schneller. Selbst die Umstellung auf MaskBlt (wegen der Transparenz) war noch immer 12x schneller.

Jackie1983 15. Okt 2007 21:44

Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw
 
dann habe ich was falsch gemacht....

Whookie 15. Okt 2007 21:55

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!

Jackie1983 15. Okt 2007 23:57

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.....

Muetze1 16. Okt 2007 00:31

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 MSDN-Library durchsuchenInvalidateRect(), Delphi-Referenz durchsuchenTCanvas.ClipRect, MSDN-Library durchsuchenInterSectRect() und wie gesagt MSDN-Library durchsuchenBitBlt(). Bei mir werden Objekte wirklich nur gemalt, wenn sie gemalt werden müssen (schneiden oder innerhalb des ClipRect) und dann auch nur den Teil, den sie malen müssen (IntersectRect() liefert das Übeschneidungsrechteck). Ganz ohne OpenGL oder andere Dinge..


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:34 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz