Delphi-PRAXiS
Seite 11 von 16   « Erste     91011 1213     Letzte » 

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   AnimatePNG (https://www.delphipraxis.net/192106-animatepng.html)

EWeiss 28. Mär 2017 13:59

AW: AnimatePNG
 
Zitat:

Also, ich begrüße es, daß Emil sich einer solchen Herausforderung stellt
Ich versuche ja alles damit es läuft das kannst du schon daran erkennen wie viele neue Threads ich in letzter zeit erstellt habe.
Alles kann man halt nicht wissen.
Da ist man wie vor :wall: gestoßen.

Aber gut sei's drum ;)

gruss

EWeiss 28. Mär 2017 14:41

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

Neutral General 28. Mär 2017 14:47

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?

EWeiss 28. Mär 2017 14:53

AW: AnimatePNG
 
Zitat:

Zitat von Neutral General (Beitrag 1365779)
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?

ImageRectI
Delphi-Quellcode:
GDIP_DrawImageRectRectI(PngGraphics, PngImage, X, Y, w, h, w * integer
  (CurPngPlayInfo.PngFrame) - w, 0, w, h, 2, nil, False, nil);
gdipDrawCachedBitmap hat nur die Weite und die höhe.
Dieser Part ist besonders wichtig weil er das Bild im Bild von der Aktuellen Frame Position zeichnet.
Delphi-Quellcode:
w * integer
  (CurPngPlayInfo.PngFrame) - w
Ich möchte vom GDIP_DrawImageRectRectI weg und anstelle dessen gdipDrawCachedBitmap verwenden weil es 3x mal schneller ist.
Glaube aber das es so nicht umsetzbar ist.

gruss

Neutral General 28. Mär 2017 14:59

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.

EWeiss 28. Mär 2017 15:03

AW: AnimatePNG
 
Zitat:

Zitat von Neutral General (Beitrag 1365781)
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.

Es geht darum die Geschwindigkeit bzw. die Auslastung der CPU zu minimieren.
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:

Da passt false dann nicht.
false ist OK ;)
Delphi-Quellcode:
callback: BOOL; callbackData: Pointer


gruss

Neutral General 28. Mär 2017 15:19

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?

EWeiss 28. Mär 2017 15:31

AW: AnimatePNG
 
Zitat:

Wieso baust du dir denn überhaupt ein Bild in dem alle Einzelbilder enthalten sind um sie dann quasi beim Zeichnen wieder zu trennen?
Baue ich ja nicht das ist das Standard Format von APNG.

gruss

jaenicke 28. Mär 2017 15:38

AW: AnimatePNG
 
Zitat:

Zitat von EWeiss (Beitrag 1365786)
Baue ich ja nicht das ist das Standard Format von APNG.

In der Datei stehen ein Standardbild und für jeden Frame ein weiterer Chunk mit dem PNG Bild für diesen Frame. Dort gibt es kein großes Bild.

Neutral General 28. Mär 2017 15:40

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 17:34 Uhr.
Seite 11 von 16   « Erste     91011 1213     Letzte » 

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