Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Schnelles Upscaling für Bilder (https://www.delphipraxis.net/157568-schnelles-upscaling-fuer-bilder.html)

Memnarch 17. Jan 2011 00:21


Schnelles Upscaling für Bilder
 
Tag,
und noch ne Performancefrage :).
Da diese wieder etwas anders ist, nen neuer thread, dan bleibts getrennt und ist für andere leichter findbar.

ALSO: in meinem Aktuellen projekt wird ein 480p Bild auf Bildschirmgröße skaliert. Das geschiet per GDI+ funktionen. Frisst natürlich ordentlich performance wenn man das so 25mal pro sekunde macht :stupid: .

Meine Frage wäre an dieser Stelle: Bringt es was das Bild zu laden und anstatt per GDI+ per Graphics32 zu upscalen und dann ans LayeredWindow zu überreichen? Graphics32 soll ja schnell sein im Gegensatz zu den Buildin Delphi Komponennten, aber ich habe keine ahnung wie das im vergleich zu der GDI+ ist, GDI+ müsste doch noch langsamer gewesen sein oder?

MFG
Memnarch

Medium 18. Jan 2011 02:48

AW: Schnelles Upscaling für Bilder
 
Das wird nicht zwangsweise mit der Lib bzw. API zu tun haben, sondern ggf. mit der verwendeten Resamplingmethode (und deren Qualitätseinstellungen). Das schnellst-mögliche wäre es, wenn du an einen Pointer zu dem Imagebuffer kommst, und händisch eine Nearest-Neighbour-Interpolation machst. Die nächst-effizientere Variante wäre (Bi-)Linieare Interpolation, die schon deutlich schmucker ist, aber auch etwas mehr kostet (ab hier braucht's vor allem Floats). Das ganze einigermaßen smart implementiert ist Kleinkram. Teuer können auch die Umkopiererein in die jeweiligen bibliotheksspezifischen Container sein, die meist nicht ohne irgendwelche Konvertierungen/Prüfungen vonstatten gehen. Soll heissen: Je mehr du selbst das Heft in der Hand hälst, desto mehr hast du die Performance auch wirklich im Griff. APIs und Libs sind komfortabel, aber je nach Kombination kommen einen manche Operationen teurer als man zunächst vermutet.

Anders gesagt: Deine Frage ist sehr unvollständig, da zu klären ist wie du wann wo welche Daten in welcher Weise von was verrechnen lässt, und was für eine Performance dir so vorschwebt.

hoika 18. Jan 2011 06:05

AW: Schnelles Upscaling für Bilder
 
Hallo,

Zitat:

wird ein 480p Bild auf Bildschirmgröße skaliert
Ist das immer das gleiche Bild ?
-> dann nach dem Resample puffern.

Ändert sich immer nur ein Ausschnitt ?
-> nur den Ausschnitt resamplen und das gepufferte Bild schreiben


Heiko

Memnarch 18. Jan 2011 15:07

AW: Schnelles Upscaling für Bilder
 
ACH verzeiht, hatte hier einige Infos vergessen ;).
Ja das bild ändert sich immer Komplett, ist eine Animation.

@Medium: Ich guck mal OB und WO ich vllt noch kopiervorgänge einsparen kann :).

Solche sampling qualitäten hat die GDI+ bereits integriert. Wenn ich das originalbild in die vergrößerte Zielbitmap zeichne, muss ich nur den gewünschten Modus vorher angeben, sofern ich das bestimmen möchte.

EDIT: noch ne Kurze Forue spezifische Frage wnen sie an dieser Stelle gestatet ist ;).
Im Bereich Projekte, dürfen da nur fertige oder auch WIPs rein?

MFG
Memnarch

Namenloser 18. Jan 2011 16:08

AW: Schnelles Upscaling für Bilder
 
Mal ne andere Frage: Ist es wichtig, dass der Bildschirminhalt immer "aktuell" ist? Wenn nicht, lass das LayeredWindow lieber, denn ich schätze, dass das auch einiges an Performance frisst. Mach doch einfach beim Start einen Screenshot, über den du dann die Einzelbilder selbst blendest. Geht z.B. mit Gr32 oder auch hardwarebeschleunigt mit OpenGL/Direct3D.

Memnarch 18. Jan 2011 17:05

AW: Schnelles Upscaling für Bilder
 
frisst nicht viel. der wmanager hat nich viel zu tun. Wenn man LAyered windows benutzt, wird das handling an windows direkt übergeben.

Namenloser 18. Jan 2011 17:08

AW: Schnelles Upscaling für Bilder
 
Hast du's getestet?

Memnarch 18. Jan 2011 18:46

AW: Schnelles Upscaling für Bilder
 
Ob es viel frisst?
Von dem wa sich am anfang an auslastung gemessen habe, ist es gleichauf wenn nicht sogar etwas performanter als eine normale Form.

Und was die regions angeht: ich müsste erstmal gucken wie ich DAs hinbekomme. Soweit ich das verstanden habe sind regionen doch shapes die aus dem fenster ausgeschnitten bzw hinzugefügt werden oder nicht? Dan müsste ich für 5478 Bilder, Vektormasken erstellen...o.O

EDIT: Ok habs gesehen, der kalkuliert die regions aus den bildern, aber was ist mit der semitransparenz?
EDIT2: Dan geht mir zusätzlich performance fürs berechnen der regionen flöten, die dan eventuell nichtmal mit Semitransparenz zurechtkommen >.<
Edit3: Hab ich echt schonwieder meinen eigenen Post geflagged? Ich brauch endlich mal ne neue maus, die klickt andauernd doppelt >.<

EDIT4: DAs layered Window frists nicht mehr als ne normale Form die ich so excessive bemale. ;) (layered Window ist glaub ich sogar etwas shcneller gewesen)

EDIT5: Achne, das mit den regionen aus Bitmaps war ne Userfunktion^^"

Medium 19. Jan 2011 06:04

AW: Schnelles Upscaling für Bilder
 
Ooooookay, kommen wir also (wieder mal ;) ) zur wichtigsten Frage der Welt: Was willst du am Ende überhaupt erreichen, und worin besteht deine Ausgangssituation? :)

Memnarch 19. Jan 2011 09:19

AW: Schnelles Upscaling für Bilder
 
Was ich erreichen will, ist eine Animation die über den Ganzen screen ausgegeben wird.

Such mal bei Youtube nach "Touhou - BadApple", den Screensaver bau ich nach.
Das klappt auch inzwischen wirklich gut. Ich habe auch inzwischen das ganze mit 2 Threads am arbeiten, einer der regelmässig die Rohbilder nachpuffert, und der Hauptthread der diese Bild hochskaliert und anzeigt.

Nur möchte ichgucken, wo ich noch ein Bisschen die performance verbessern kann. Die Grafikoperationen sind da im Aktuellen schussfeld, und besonders das Upscaling das auch gut was nimmt ;).


Gibt auch nochn paar andere stellen an denen ich noch gucken muss^^.

MFG
Memnarch


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 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