Joerg Rossdeutscher schrieb:
Hallo
Am Samstag, den 25.12.2004, 20:41 +0100 schrieb Kai Hauser:
Hi Joerg. rechen mal aus: 100^64 das ist die Anzahl der Unterschiede die du Speichern möchtest.
Ne, möchte ich eben nicht. Es gibt ja nur einen Fingerprint pro Font - also bei 400.000 Fonts ebensoviele Fingerprints.
du hattest geschrieben: "mit Werten von 00 bis 99" nicht mit 3 Werten (00,50,99)
Naja, das Aussehen eines Fonts kann man eben nicht in einer einfach Zahl speichern.
Sicher kann man das, für die CPU sind Fonts auch nur Zahlen (0,1) und außerdem die ganze Welt besteht nur aus Zahlen (den Film PI gesehn?) ;-)
Der Fingerprint kommt so zustande:
Ich erstelle ein leeres Bild. Darin wird der Buchstabe mit 128 Pixeln Größe geschrieben. Dann wird der weiße Rand abgeschnitten.
(Damit ist sichergestellt, daß der Buchstabe komplett drauf ist und genau bis an den Rand geht)
Das Bild wird jetzt unproportional gezerrt, bis es genau 128x128 Pixel groß ist.
geht daruch nicht der Font "kaputt"? Wie erkennt man da noch den Unterschied zw zb einem o und einer 0, unproportional gezerrt sehn die in etwa gleich aus oder?
Dann wird es in 8x8 kleine Bilder zerlegt - macht 64 Bilder.
hmm nicht 16 Bilder, ok 64 Werte.
Für jedes dieser Bilder wird ermittelt, wieviele Pixel weiss sind, und wie viele Schwarz, umgerechnet in Prozent. (Naja. Fast. Um der Zweistelligkeit willen rechne ich mit 99 statt 100 als Maximum)
Die 64 Werte ergeben dann den Fingerprint: 00 für weiss, 99 für Schwarz, 50 für "halb".
Die drei Werte kannst du in 2 bits speichern. In Zahlen wär das 0, 1 und 2. 00 = weis = 0 01 = schwarz = 1 10 = "halb" = 2 Um so 64 Werte zu Speichern bräuchtest du 128 bit = 16 Byte Das kannst du evtl sogar noch in einer Varibalen in mysql speichern wenn nicht halt in 16 unsigned tinyint und da die Werte schön binär Vorliegen würden kann die CPU auch schneller mit umgehn. hoffe es hilft dir etwas weiter, denn das ganze hört sich richtig Praktisch an.