eigenes bildformat /erledigt

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

judos

Betreff: eigenes bildformat /erledigt

BeitragDo, Jun 01, 2006 10:52
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo zusammen,

ich habe mal angefangen ein eigenes bildformat zu schreiben, allerdings habe
ich jetzt ein problem: das neue format ist ungefähr 10mal grösser als das jgp bild. die funktion sieht so aus:

Code: [AUSKLAPPEN]

Function save_mat(image,name$)
file=WriteFile(name$)
WriteShort file,ImageWidth(image)
WriteShort file,ImageHeight(image)
LockBuffer ImageBuffer(image)
For i=0 To ImageHeight(image)-1
   For j=0 To ImageHeight(image)-1
      rgb=ReadPixelFast(i,j,ImageBuffer(image))
      r=(rgb And $FF0000)/$10000
      g=(rgb And $FF00)/$100
      b=rgb And $FF
      WriteByte file,r
      WriteByte file,g
      WriteByte file,b
   Next
Next
UnlockBuffer ImageBuffer(image)
CloseFile file
End Function


es werden pro plot drei bytes geschrieben. wie kann man das noch weiter verkleinern ???

mfg judos
  • Zuletzt bearbeitet von judos am Sa, Jun 03, 2006 12:46, insgesamt einmal bearbeitet

Der Wanderer

BeitragDo, Jun 01, 2006 11:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Normalerweise benutzt man verlustfreie (.gif, .png, .pcx) oder verlustbehaftete (.jpg) Komprimierungsalgorithmen, um Bilder einzudampfen. Das was du machst, ist das Bild einfach unkomprimiert raus zu dumpen, und das auch noch relativ ineffizient (einzelne Bytes schreiben). Das ist ungefähr so wie Microsofts .bmp Format.

Das ist eigentlich kein "eigenes" Bildformat, sondern ein Raw Data dump.
 

judos

BeitragDo, Jun 01, 2006 12:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ok wie geht so ein komprimierung logarythmus? kannst du das mal ein bisschen genauer beschreiben? würde mich sehr interessieren...
Cool

mfg judos

BlitzChecker

BeitragDo, Jun 01, 2006 12:27
Antworten mit Zitat
Benutzer-Profile anzeigen
dein bildformat könntest du bytemap (.bmp dateien = BITmap) nennen... ich hab auch mal sowas versucht, bin aber auch in der bildgrösse gescheitert...
www.xairro.com

Henry

BeitragDo, Jun 01, 2006 12:38
Antworten mit Zitat
Benutzer-Profile anzeigen
judos hat Folgendes geschrieben:
ok wie geht so ein komprimierung logarythmus? kannst du das mal ein bisschen genauer beschreiben? würde mich sehr interessieren...
Cool

mfg judos


Es gibt verschiedene Algorithmen für die Komprimierung, welche den Thread hier sicherlich sprengen würden.
Aber wie heisst es doch immer so schön: Google ist Dein Freund!
Aiya Eärendil Elenion Ancalima!

All you have to decide is what to do with the time that is given to you.

Robsite.de ist eine Anlaufstelle für Tutorials und Tools, die Noobs das Leben leichter machen!
Forensuche ist nicht nur als Lückenfüller in den oberen Links gedacht!

d-bug

BeitragDo, Jun 01, 2006 12:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Al90's BB-Cruncher kann dir da helfen. Den gibt es auch in einer Non-GUI Version, die man in seinen Code einfach einbinden kann. So habe ich die Skins für XUI gepackt.

cheers

DerHase

BeitragDo, Jun 01, 2006 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau, das wollte ich vorhin auch schreiben, aber dann bin ich Kaffee kochen gegangen. Und jetzt wo ich wieder komm, hat D-Bug schon den Typ zum BB-Cruncher gegeben. Nimm den, der ist total cool.

Der Wanderer

BeitragDo, Jun 01, 2006 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, wenn du nicht mal einen Algorithmus von einem Logarithmus unterscheiden kannst, und das auch noch falsch schreibst, solltest du dich vielleicht erstmal an was anderem versuchen als gleich ein eigenes Grafikformat entwicklen zu wollen, sowas wie "gib mir die ersten 100 Fibonacci Zahlen aus" oder "Türme von Hanoi" lösen.

Für was brauchst du das denn ? Geht es nur darum dass andere die Grafiken nicht editieren sollen ?

Aber ich will auch konstruktiv sein:
- spare dir den Aufwand, die Daten einfach nur zu packen mit einer fertigen Funktion. Die einsparung wird wesentlich weniger als bei JPEG sein, und
auf der Platte hat man heutzutage genug Platz, und für die Internetveröffentlichung zipst du es ja sowieso, das ist genauso gut als wenn du die Dateien einzeln manuell packst, evtl. sogar besser.

- für Verlustfreies packen macht man es so:
Man versucht das Bild erstmal für den Packer vorzubereiten, indem man versucht Pixel vorherzusagen (Predictor). Dann speichert man nur den Fehler zwischen dem vorhergesagten Wert und dem tatsächlichen. Dadurch bekommst du nicht lauter Werte zwischen 0-255, sondern in sehr vielen Fällen kleine Zahlen (die sog. Deltas).
Auf diese Deltas lässt du dann einen Packer los, wie BB Cruncher oder sonstwas (zlib ist ganz gut), was dann besser packt.

Beim entpacken geht es dann umgekehrt:
Mit dem Packer entpacken, und aus den Deltas wieder die eigentlichen Pixel berechnen. Man sagt wieder die Pixel vorher, und addiert das Delta dazu.

Verlustbehaftetes Packen ist etwas komplizierter (daszu bracht man die Fourier Transformation), aber vermutlich nicht das was du willst.

Goodjee

BeitragDo, Jun 01, 2006 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
odre man nspeichert alle farben die es gibt und weißt denen werte zu. damm kann man auf die bilder mit diesen werten beschreiben....nur 0 und 1 reserviert man, die bedeuten siehe links und siehe oben....das geh allerdings nur wenn man sie von links oben nach rechts unten wieder "zusammenbaut"
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Der Wanderer

BeitragDo, Jun 01, 2006 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wäre dann farbenindiziert, etwa wie bei GIF.
Das geht aber nur für Bilder mit wenigen Farben, z.B. Zeichnungen mit grossen einfarbigen Flächen, bei Fotos oder Farbverläufen gibt es Qualitätsverlust.
Welches Format am besten isthängt natürlich auch stark von dem Bild selbst ab.
Fotos (wnn es nicht so genau sein muss) JPEG
bei bester Qualität 24 bit PNG
wenn man wenig Farben hat auch farbenindiziertes GIF/PNG.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group