Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Alternative zu StretchBlt gesucht (https://www.delphipraxis.net/183034-alternative-zu-stretchblt-gesucht.html)

Harry Stahl 7. Dez 2014 22:27

AW: Alternative zu StretchBlt gesucht
 
Ja, liegt daran. Der Nearest-Resampler hat aber eine nicht akzeptable Qualität. Der Linear-Resampler ist so gut wie StretchBlt, aber eben deutlich langsamer.

Namenloser 7. Dez 2014 22:54

AW: Alternative zu StretchBlt gesucht
 
Es liegt vermutlich eher am Hin- und Herkonvertieren zwischen TBitmap und TBitmap32. Graphics32 ist eigentlich extrem flott, kann mir nicht vorstellen, dass die WinAPI da wesentlich schneller ist. Nach meinen Erfahrungen ist es meistens eher umgekehrt.

Harry Stahl 7. Dez 2014 23:10

AW: Alternative zu StretchBlt gesucht
 
Beim Zeitmessen hab ich natürlich auch mal nur den Draw-Aufruf der Graphics32 gemessen und mit StretchBlt verglichen (32-Bit-Bitmap mit teiltransparentem Inhalt). Da war nur der Aufruf mit der schlechten Qualität besser, mit der mittleren war schon StretchBlt schneller.

Medium 8. Dez 2014 09:09

AW: Alternative zu StretchBlt gesucht
 
Das ist in der Tat seltsam, bisher kenne ich die GR32 auch eher als super-turbo im Direktvergleich mit den GDI Operationen. Was natürlich insgesamt sehr sparen kann, wäre die Verwendung von nur GR32 programmweit, so dass das Umkopieren weg fällt. Bei schon bestehenden größeren Werken natürlich keine Option.
Du kannst aber durchaus direkt ein TBitmap32 auf einen GDI Canvas zeichnen: TBitmap32.DrawTo() - Damit ließe sich, wenn es nur um die Anzeige geht, ein Mal kopieren schon sparen.

Dejan Vu 8. Dez 2014 11:44

AW: Alternative zu StretchBlt gesucht
 
Zitat:

Zitat von Medium (Beitrag 1282595)
Bei schon bestehenden größeren Werken natürlich keine Option.

Gerade diese Einstellung verhindert sinnvolles Refactoring und das Weiterleben von legacy Anwendungen :-). *Natürlich* ist es eine Option, die bewertet werden muss.

Harry Stahl 8. Dez 2014 18:31

AW: Alternative zu StretchBlt gesucht
 
Hab noch mal ein wenig weiter getestet:

3548 x 2558 Pixel-Grafik, Shrink auf ca. 1/8-Größe:

TLinear: 266 MS
TKernel: 140 MS
TDraft: 30 MS
TNearest: 0 MS

"Draft" ist übrigens von der Qualität besser als der Name vermuten lässt.

In der Summe "wäre" die Sache mit "Draft" sogar noch ein wenig schneller als Stretchblt, jedenfalls wenn die Reduzierung auf ca. 25% oder kleiner erfolgt. Bei Vergrößerungen ist Stretchblt in allen Fällen schneller. Da ich an anderen Stellen aber auch noch mit StretchBlt zeichne (z.T. in Regions des gleichen Bilds) unterscheiden sich die Renderergebnisse ganz leicht. Man muss schon genau hinsehen, aber es fällt eben doch auf. Wenn ich auch in den Regions mit TBitmap32 zeichne, wird es leicht langsamer.

Da ich vorerst hier nichts umstellen möchte (Programmcode immerhin über 500.000 Zeilen), passt eine nur teilweise Zeichnung mit Graphics32 nicht so richtig ins Konzept.

Die erwähnte Option "alle Stellen" im Programm auf TBitmap32 umzustellen, wäre eine Überlegung für das nächste große Update, momentan versuche ich mich noch an kleineren Optimierungen.

Generell macht die Graphics32 einen guten Eindruck.

EWeiss 8. Dez 2014 21:23

AW: Alternative zu StretchBlt gesucht
 
DrawImageRectRectI

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr.
Seite 2 von 2     12   

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