Entwickler-Ecke
Multimedia / Grafik - JPG Grafik schnell in Bitmap laden
uall@ogc - Fr 27.06.08 14:20
Titel: JPG Grafik schnell in Bitmap laden
Hallo,
wie kann man eine JPG Grafik schnell in ein Bitmap laden und ggf skalieren und per Scanline nachbearbeiten?
Konkret geht es darum Bilder (JPEGs) im HD Format (1980*1020) zu laden, durch verschiedene Filter (Gamma) nachzubearbeiten und zu skalieren (um z.B. 3 der Bilder nebeneinander anzuzeigen).
Versucht habe ich es konkret mit GDI+ und Bitmap.Assign.
Delphi-Quelltext
1: 2:
| Jpeg.LoadFromFile('..'); Bitmap.Assign(Jpg); |
Mit
http://www.fastpictureviewer.com komm ich bei voller Auflösung auf ca. 17 FPS (58msek).
Mit GDI+ und Bitmap.Assign (GDI) nur auf ~6-7.
Wie bekomm ich es schneller hin? Gibt es u.U. eine schnellere JPG Dekompressionskomponente, da dieses wohl am längsten braucht? Gibt es Alternativen? (Preis/Leistung zwischen Speicherverbauch, Dekompressionsgeschwindigkeit sollte gut sein) eventl. PNG/TIFF?
Lossy eX - Fr 27.06.08 14:59
Du kannst/solltest bei dem jpeg die Eigenschaft
Performance auf
jpBestSpeed setzen. Damit wird es schneller.
Alternativ kannst du auch auf die
libjpeg [
http://www.opengl24.de/index.php?cat=header&file=libjpeg] zugreifen. Die Quellen von der Bibliothek dienten auch der jpeg Implementation in Delphi. Allerdings ist die Bibliothek noch mal einen Tick schneller.
Wenn du die Bilder im nachhinein sowieso kleiner skalierst kannst du sie auch von Hause aus kleiner laden. Natürlich nur wenn das möglich ist. Das ist dann ein reingewinn in jeder Hinsicht, denn JPEGs kann man direkt kleiner laden und spart dabei Rechenzeit. Obendrein sind die Operationen dann auch schneller.
PNG und TIFF mit LZW greifen meines wissen nach beide auf die zlib zu und der algorithmus von der Bibliothek ist ziemlich schnell. Allerdings hat jpeg aufgrund der Verlustbehaftung natürlich wesentlich mehr möglichkeiten viel kleinere Dateien zu erzeugen. Fotos als PNG sind in der Regel um das 3-5 fache Größer als JPEG. Was sich dann wieder sehr negativ auf die Lesegeschwindigkeit auswirkt. Für pngs würde ich dir die
libPNG [
http://www.opengl24.de/index.php?cat=header&file=libpng] empfehlen. Dazu habe ich auch einen Header geschrieben.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!