Gedacht ist es vorrangig für die Nutzung in 2D-Spielen und hat die folgenden Merkmale:
- schnelles Dekodieren
- langsames Kodieren
- verlustfrei
- Unterstützung für Alphakanal
- kleine Dateigröße, vergleichbar mit PNG, machmal größer, manchmal kleiner, kommt auf das jeweilige Bild an
Der Paeth-Filter wird nicht unterstützt, da er sehr langsam ist, ungefähr 10 mal langsamer als die anderen Filter. Und nebenbei hat er bei meinen Testbildern nie das optimale Ergebniss geliefert.
Ich plane meine eigene Kompression zu entwickeln und zu integrieren, welche wesentlich langsamer komprimieren wird aber eine bessere Kompressionsrate erreichen wird. Die Dekomprimierung sollte in etwa gleichschnell sein.
Das Include ist im Augenblick noch weitestgehend unoptimiert. Lediglich die Dekodierung der Filter ist ein wenig optimiert. Dennoch erreicht der Decoder schon bis zu doppelter Geschwindigkeit des PB internen PNG Decoders. Abhängig von der Plattform, dem Subsystem und natürlich dem Bild selbst.
Desweiteren unterstützt das Format 2 verlustfreie Transformationen für die Bilddaten. Sehr einfache Sortierungen der Kanäle. Das führt dazu das mein Format bei manchen Bildern PNG in der Dateigröße noch unterbietet. Verglichen mit hochoptimierten PNG's durch den PNG Optimizer. Allerdings ist es in Sachen Dateigröße im Vergleich mit PNG bei Bildern mit wenigen Farben im Nachteil, da es im Augenblick keine Farbindizierung unterstützt. Die Pixel werden immer in 32bit gespeichert.
Es sollte auf jeder Plattform die PB unterstützt und jedem Subsystem welches den Alphakanal unterstützt laufen. Allerdings ist es noch nicht gut durchgetestet und befindet sich noch im Betastadium.
Hier ist das Include: http://www.GameTreasure.de/downloads/TsiInclude.zip benötigt PB 4.40
Kommt mit einem Plugin für XnView zum Anzeigen und Speichern (Konvertieren) von TSI's.
Mit einem "stand alone" Konverter (nur Windows) und einem "stand alone" Viewer (nur Windows).
Hier noch die wichtigsten Prozeduren des Includes:
Tsi_LoadTsi2Image(FileName.s)
Ähnlich wie PB's LoadImage. Läd ein TSI von der Festplatte und dekodiert es in ein PB Image.
Tsi_CatchTsi2Image(*Tsi)
Ähnlich wie PB's CatchImage. Dekodiert ein TSI im Speicher in ein PB Image.
Tsi_LoadTsi2Sprite(FileName.s)
Ähnlich wie PB's LoadSprite. Läd ein TSI von der Festplatte und dekodiert es in ein PB Sprite.
Tsi_CatchTsi2Sprite(*Tsi)
Ähnlich wie PB's CatchSprite. Dekodiert ein TSI im Speicher in ein PB Sprite.
Tsi_BestSaveFromImage(Image.i, FileName.s)
Ähnlich wie PB's SaveImage. Kodiert ein PB Image zu einem TSI und speichert es auf die Festplatte.
Tsi_BestSaveFromSprite(Sprite.i, FileName.s)
Ähnlich wie PB's SaveSprite. Kodiert ein PB Sprite zu einem TSI und speichert es auf die Festplatte.
Tsi_BestSave2MemoryFromImage(Image.i, *TsiSize.Integer)
Ähnlich wie PB's SaveImage, aber es legt das TSI in den Speicher anstatt es auf die Festplatte zu speichern.
Tsi_BestSave2MemoryFromSprite(Sprite.i, *TsiSize.Integer)
Ähnlich wie PB's SaveSprite, aber es legt das TSI in den Speicher anstatt es auf die Festplatte zu speichern.
Also ist es sehr einfach zu nutzen. Es gibt noch eine Prozeduren mehr, die mehr Kontrolle ermöglichen. Aber ihr könnt das Include selbst erkunden. Alle Prozeduren sind kommentiert mit dem was sie tun und was sie zurückgeben.
Ich hoffe jemand kanns gebrauchen.
Wenn ich mit den Optimierungen fertig bin und meine eigene Kompression hinzugefügt habe, werde ich ein 2D-Animationsformat machen (TSA).