Autor Beitrag
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Fr 27.06.08 14:20 
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.

ausblenden Delphi-Quelltext
1:
2:
  Jpeg.LoadFromFile('..');
  Bitmap.Assign(Jpg); // ca. 150msek


Mit 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?

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: 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 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 empfehlen. Dazu habe ich auch einen Header geschrieben.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.