![]() |
AW: AnimatePNG
Zitat:
Alles kann man halt nicht wissen. Da ist man wie vor :wall: gestoßen. Aber gut sei's drum ;) gruss |
AW: AnimatePNG
Sorry nochmal..
Hier ein PIC welchen Unterschied es macht ob man DrawImage oder Cached Bitmap verwendet. 120 Bilder werden gezeichnet. Oben ist DrawImage. Bin mir nur nicht klar darüber wie gdipDrawImageRectRectI mir gdipDrawCachedBitmap ersetzen soll. Ich brauche die zweite Dimension von gdipDrawImageRectRectI. Das Teil ist 3x mal so schnell. 25% CPU / 3 = 8,3 damit könnte ich leben. Hmmm... muss denken . LOL. gruss |
AW: AnimatePNG
Du benutzt gdipDrawImageRectRectI quasi genauso wie gdipDrawCachedBitmap nur dass du nicht 10 einzelne Bilder hast sondern 1 Bild aus dem du nur einen Ausschnitt zeichnest, den du darstellen willst.
Dafür gibts die src und dest Parameter. srcX/Y/Width/Height sind das Rechteck dass aus dem Bild mit den Einzelbildern ausgeschnitten wird und destX/Y/Width/Height ist das Rechteck in dem der ausgeschnittene Teil dargestellt werden soll. Also wahrscheinlich 0,0,Einzelbild.Width,Einzelbild.Height. Oder hab ich was falsch verstanden? |
AW: AnimatePNG
Zitat:
Delphi-Quellcode:
gdipDrawCachedBitmap hat nur die Weite und die höhe.
GDIP_DrawImageRectRectI(PngGraphics, PngImage, X, Y, w, h, w * integer
(CurPngPlayInfo.PngFrame) - w, 0, w, h, 2, nil, False, nil); Dieser Part ist besonders wichtig weil er das Bild im Bild von der Aktuellen Frame Position zeichnet.
Delphi-Quellcode:
Ich möchte vom GDIP_DrawImageRectRectI weg und anstelle dessen gdipDrawCachedBitmap verwenden weil es 3x mal schneller ist.
w * integer
(CurPngPlayInfo.PngFrame) - w Glaube aber das es so nicht umsetzbar ist. gruss |
AW: AnimatePNG
Kannst du grad nochmal sagen wo es grad hängt. Bin grad etwas raus sorry.
Der Aufruf sieht doch in Ordnung aus. Bis auf den vorletzten Parameter zumindest, dem du laut Internet eine Callback Funktion übergeben sollst. Da passt false dann nicht. |
AW: AnimatePNG
Zitat:
Die Funktion gdipDrawCachedBitmap ist dreimal so schnell wie die von mir aktuell verwendete GDIPDrawImageRectRectI. Da gdipDrawCachedBitmap nur zwei Parameter hat Weite\Höhe habe ich das Problem GDIPDrawImageRectRectI zu ersetzen. Muss mal sehn vielleicht finde ich noch eine anderer Lösung. ;) Zitat:
Delphi-Quellcode:
callback: BOOL; callbackData: Pointer
gruss |
AW: AnimatePNG
Achso, ich habs genau andersrum verstanden.
In der APNG Datei sind doch so viele Einzelbilder enthalten wie Frames in der Animation wenn ich das richtig verstanden habe. Dann musst du ja nur alle Einzelbilder laden und nacheinander mit gdipDrawCachedBitmap zeichnen. Wieso baust du dir denn überhaupt ein Bild in dem alle Einzelbilder enthalten sind um sie dann quasi beim Zeichnen wieder zu trennen? |
AW: AnimatePNG
Zitat:
gruss |
AW: AnimatePNG
Zitat:
|
AW: AnimatePNG
Im Zweifelsfall kannst du halt auch aus dem großen Bild mit allen Frames beim Laden manuell eine Liste von Einzelbildern erstellen und diese dann mit gdipDrawCachedBitmap Zeichnen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 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