AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte JPEG(-Prinzip) nachgeproggt - ohne TJPEGImage etc.
Thema durchsuchen
Ansicht
Themen-Optionen

JPEG(-Prinzip) nachgeproggt - ohne TJPEGImage etc.

Ein Thema von dizzy · begonnen am 23. Nov 2004 · letzter Beitrag vom 23. Nov 2004
Antwort Antwort
Benutzerbild von dizzy
dizzy
Registriert seit: 26. Nov 2003
So Leute, nach langer Bastelei definiere ich mein eigenes JPEG-Like Bildformat als für vorläufig fertig.
Entstanden ist eine Klasse die ähnlich der TJPEGImage zu bedienen ist - als wesentliche Properties stehen:
  • TFKJPEG.LoadFromFile(FileName: String)
  • TFKJPEG.SaveToFile(FileName: String)
  • TFKJPEG.Bitmap: (TBitmap | TBitmap32)
  • TFKJPEG.Quality: 1..100

Das Verfahren mit dem die Kompression statt findet ist vollständig von JPEG abgeguckt, aber das hat's echt nicht einfacher gemacht . Von daher sehen die Bilder bei entsprechend starker Kompression auch JPEG-mäßig aus - sie sind es de facto.
TFKJPEG ist freilich bei weitem nicht so schnell wie die High-End Implementationen kommerzieller Produkte, aber ich bin ja schon ein wenig stolz dass es überhaupt geht .
Die Quality wird genau so wie bei JPEGs verwendet: 100 = höchste Qualität, 1 = niedrigste Qualität.

Wie siehts mit der Bildqualität im vergleich zu JPEG bezogen auf die Dateigröße aus? Nun, das ganze ist so gehalten dass ein und das selbe Bild mit gleichem Quality-Wert sowohl als echtes JPEG als auch als TFKJPEG annähernd gleich groß werden. Die Bildqualität ist im mittleren Bereich bei echtem JPEG deutlich besser (die bekommen die Blockung so schön weg... ), allerdings relativiert sich das recht schnell bei den besseren Settings. Sogar so weit, dass TFKJPEG bei Quality = 100 eine (minimal) höhere Bildqualität bietet, was sich aber auch sehr deutlich in der Dateigröße wiederspiegelt.
Zu den schlechteren Qualitäten (20 bis 1) hin erzeugt echtes JPEG merkbar kleinere Dateien, die aber auch schlechter aussehen. Und wer komprimiert schon so stark (bei Standbildern )?

Ich lege den kompletten Source zu Studienzwecken offen - wobei der alleine zum Verständnis nicht ganz ausreichen dürfte. Hierzu waren abenteuerliche Exkurse in die Human-Biologie, Physik, Mathematik und Kompressionsalgorithmen notwendig. Ich habe bei diesem Projekt einen ganzen Haufen gelernt, und in Verbindung mit Google und WiKiPedia sollte sich das Konzept an sich recht schnell erfassen lassen.
Wenn da interesse besteht: Hier eine offene Lösung als Code (habe ich nämlich nirgends komplett gefunden...).

Im Anhang sind 2 Versionen. Einmal für die Graphics32-Lib, und einmal für VCL ohne Extrakompos. Erstere Version ist die eigentlich originale und einen Happen schneller, da die VCL-Variante nur ein Port ist, und bei der G32 ist der Zugriff via Canvas.Pixels[x,y] nahezu so schnell wie mit Scanline - das hab ich in der VCL-Variante nicht geändert...
Ein kleines Beispielprojekt (auch kompiliert) liegt mit bei, welches zwischen BMP, JPG und KPG (eigenes Format) konvertiert.

Was noch anstünde ist reichlich Laufzeit- und Speicheroptimierung. Da hab ich schon so einige Stellen an die ich nochmal ran möchte - da ist sicherlich noch viel möglich. Aber leserlicher wird wahrscheinlich dieses hier sein

btw: Die Unit "Huffman.pas" kann auch separat verwendet werden um beliebige Daten damit zu komprimieren. Sie müssen nur in den in der Unit deklarierten Array-Typ verpackt werden .


So, als nächstes kommt .mp3, und dann die ganze Welt *hrhrr*

Für Kritik/Anregungen/Fragen bin ich latürnich immer zu haben!


Guts Nächtle,
Fabian
Angehängte Dateien
Dateityp: zip vcl.zip (299,9 KB, 40x aufgerufen)
Dateityp: zip g32.zip (324,0 KB, 28x aufgerufen)
INSERT INTO HandVonFreundin SELECT * FROM Himmel
 
Benutzerbild von Airblader
Airblader
 
#2
  Alt 23. Nov 2004, 05:32
hm...hört sich supi an :top:

Aber was genau is der wesentliche unterschied zum alten JPEG?
Oder wars nur j4f?

air
Ingo Bürk
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#3
  Alt 23. Nov 2004, 11:06
Zitat von Airblader:
Aber was genau is der wesentliche unterschied zum alten JPEG?
Dass es 100% Eigencode ist
Fabian K.
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader
 
#4
  Alt 23. Nov 2004, 12:11
Zitat von dizzy:
Zitat von Airblader:
Aber was genau is der wesentliche unterschied zum alten JPEG?
Dass es 100% Eigencode ist
Da erkenne ich den Sinn zwar nicht, aber du meintest ja, es sei zum lernen..
wie auch immer, ich ziehe meinen hut, weil sowas zu machen ist bestimmt (oder ganz sicher) schwer..richtig schwer....unmachbar (für mich )
Ingo Bürk
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr.
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