Zum Inhalt springen

Font Umwandlung


MrMagix

Empfohlene Beiträge

Hi, ich habe mal wieder ein kleines Problem.

Ich muss z.B. das Zeichen A in folgendes umwandeln

..###.

#.....#

#####

#.....#

also ein Zeichen mit 5x7 Dots. Ueberall wo "schwarz" ist steht ein # ansonsten ein . (Punkt)

Da ich naturgemaess Faul bin ;) suche ich eine Möglichkeit einen solchen Font selbst zu erzeugen ohne jedes einzelnen Dot zu setzen - bei einem Zeichensatz mit 256 Zeichen und das mal 7! ergibt einen Haufen sehr langweilige Arbeit :)

Meine Idee nur 1: Eine Bitmap die den Font enthaelt, diese dann ausgelesen und entsprechend der Punkte meinen Ascii File erzeugt (spaeter koennte man ja die Grafik direkt verwenden)

Nur habe ich nicht den blassesten Schimmer wie ich das am Geschicktesten erledigen kann.

Die andere Idee ist das ich intern einen Java eigenen Font oder einen TrueType Font verwende und diesen umwandle - aber auch hier das Problem das ich keine Ahnung habe wie ich das Anfagen soll.

Evtl. hat ja auch einer ein ganz andere Idee - achja die Zeichen haben eine fixe Breite und Hoehe.

Was ich brauche ist im Grunde nur "Richtung" und "Drall" - programmieren kann ich das wohl alleine ;) Aber ich habe wirklich 0 Schimmer.

Ahnungslose Gruesse

Mr aehhh.... ja Magix

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich find die erste Idee eigentlich ganz gut: Du nimmst dir zB Paint, und schreibst das ganze Alphabeth in ne Bitmap-Datei. Ich würde dafür eine Schriftart mit fester Breite nehmen, somit machst du dir die Berechnung der Position eines bestimmten Zeichens einfacher. Danach bestimmst du die Höhe und Breite des Feldes, das von einem Buchstaben ausgefüllt ist, liest die Punkte ein, rechnest sie auf 5x7 um und gibst dies entsprechend aus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das stelle ich mir eher schwierig vor.

Nehmen wir mal das A. Das hat normal zwei schräge und einen waagrechten Strich. Wie willst Du die schrägen in der 5x7 Matrix plötzlich gerade rechnen? Wie errechnest Du, das die Spitze des A plötzlich ein waagrechter Strich wird, das der waagrechte Strich in der Mitte plötzlich 5 und nicht mehr ca 3 Breiteneinheiten hat?

Das kann man in meinen Augen nicht errechnen sondern muss es festlegen. Sollte aber prinzipiell nicht länger als eine halbe Stunde dauern. 26 5x7 Matrizen anlegen (boolean Array boolean[7][5]) und die booleans einmal füllen. Das ganze in eine Property-Datei auslagern oder serialisieren oder sonstwie speichern und beim Einlesen die Arrays klarmachen. Zeichnen ist dann überhaupt kein Akt mehr.

Alles in Allem ein Aufwand von ca. einer Stunde.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich habe einen Font mit einer festen Breite angenommen, sonst wird es tatsaechlich etwas schwerer.

Die automatische Textanpassung passiert im Grunde ja im Graphikprogramm. Sagen wir ich will einen Font in 5x7 Pixel, kann ich das im Graphikprogramm einstellen indem ich einen Fontsize von 5 wähle.

Die Hoehe kann ich notfalls ja manuell aendern - so habe ich zumindesten mal eine Vorlage.

Interessant wird das Ganze erst bei groessen Fonts - 16x16, dann kann man schon mal "verschnoerkelte" Fonts verwenden.

Naja ich werde mich dann mal mit dem Aufbau einer Bitmap Grafik beschaeftigen. Evtl. kann ich ja das eine oder Codesnippet hier mal fallen lassen :marine

Gruesse

Mr "Er geht jetzt erste einmal einen Pott Javabeans aufsetzen" Magix

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich Dich richtig verstehe, dann schon. Das Zeichen ist ja nicht 5 mal 7 Pixel gross, sondern 5 mal 7 Einheiten. D.h. ein Pixel bei Dir sind vielleicht 5 x 5 Pixel in real. Und da sind 10 schwarze und 15 weisse Punkte, die einen kleinen Teil vom Schrägstrich machen. Wie willst Du aus diesen Punkten berechnen, ob es ein schwarzer oder ein weisser Punkt ist? Das Problem haben alle Grafikprogramme, wenn Sie bestimmen sollen, welche Farbinformationen ein bestimmter Punkt bekommt.

Btw. ich habe jetzt in einer dreiviertel Stunde eine Lösung nach meinem Muster gebaut. Es geht also wirklich schnell.

Hier ist sie. die Buchstaben kann man zwar schöner machen, man erkennt sie aber auch so.

Peter


import java.awt.*;

import java.util.*;

import javax.swing.*;


/**

 * Zeichnet das Alphabet mit Grossbuchstaben in einer 5x7-Matrix. 

 *

 * @author kaobe

 *

 * Copyright by kaobe 2004

 */

public class ABC extends JFrame

{

    private ArrayList alphabet;


    public static void main(String[] args)

    {

        ABC abc = new ABC();


        abc.setVisible(true);

    }


    public ABC()

    {

        setSize(500, 500);

        setTitle("ABC selbstgemalt");


        initMatrices();

    }


    public void paint(Graphics graphics)

    {

        for(int i = 0; i < alphabet.size(); i++)

        {

            if(alphabet.get(i) != null)

            {

                paintCharacter(graphics, (boolean[][]) alphabet.get(i), i / 6, i % 6);

            }

        }

    }


    private void paintCharacter(Graphics graphics, boolean[][] character, int row, int column)

    {

        for(int i = 0; i < character.length; i++)

        {

            int nullX = column * 60 + 10;

            int nullY = row * 80 + 10;


            for(int j = 0; j < character[i].length; j++)

            {

                if(character[i][j])

                {

                    graphics.fillRect(j * 10 + nullX, i * 10 + nullY + 20, 10, 10);

                }

            }

        }

    }


    private void initMatrices()

    {

        alphabet = new ArrayList();

        boolean[][] character;


        // A

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{true, false, false, false, true};

        character[2] = new boolean[]{true, false, false, false, true};

        character[3] = new boolean[]{true, true, true, true, true};

        character[4] = new boolean[]{true, false, false, false, true};

        character[5] = new boolean[]{true, false, false, false, true};

        character[6] = new boolean[]{true, false, false, false, true};

        alphabet.add(character);


        // B

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, false};

        character[1] = new boolean[]{true, false, false, false, true};

        character[2] = new boolean[]{true, false, false, false, true};

        character[3] = new boolean[]{true, true, true, true, false};

        character[4] = new boolean[]{true, false, false, false, true};

        character[5] = new boolean[]{true, false, false, false, true};

        character[6] = new boolean[]{true, true, true, true, false};

        alphabet.add(character);


        // C

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{true, false, false, false, false};

        character[2] = new boolean[]{true, false, false, false, false};

        character[3] = new boolean[]{true, false, false, false, false};

        character[4] = new boolean[]{true, false, false, false, false};

        character[5] = new boolean[]{true, false, false, false, false};

        character[6] = new boolean[]{true, true, true, true, true};

        alphabet.add(character);


        // D

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, false};

        character[1] = new boolean[]{true, false, false, false, true};

        character[2] = new boolean[]{true, false, false, false, true};

        character[3] = new boolean[]{true, false, false, false, true};

        character[4] = new boolean[]{true, false, false, false, true};

        character[5] = new boolean[]{true, false, false, false, true};

        character[6] = new boolean[]{true, true, true, true, false};

        alphabet.add(character);


        // E

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{true, false, false, false, false};

        character[2] = new boolean[]{true, false, false, false, false};

        character[3] = new boolean[]{true, true, true, true, true};

        character[4] = new boolean[]{true, false, false, false, false};

        character[5] = new boolean[]{true, false, false, false, false};

        character[6] = new boolean[]{true, true, true, true, true};

        alphabet.add(character);


        // F

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{true, false, false, false, false};

        character[2] = new boolean[]{true, false, false, false, false};

        character[3] = new boolean[]{true, true, true, true, true};

        character[4] = new boolean[]{true, false, false, false, false};

        character[5] = new boolean[]{true, false, false, false, false};

        character[6] = new boolean[]{true, false, false, false, false};

        alphabet.add(character);


        // G

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{true, false, false, false, false};

        character[2] = new boolean[]{true, false, false, false, false};

        character[3] = new boolean[]{true, false, false, true, true};

        character[4] = new boolean[]{true, false, false, false, true};

        character[5] = new boolean[]{true, false, false, false, true};

        character[6] = new boolean[]{true, true, true, true, true};

        alphabet.add(character);


        // H

        character = new boolean[7][5];

        character[0] = new boolean[]{true, false, false, false, true};

        character[1] = new boolean[]{true, false, false, false, true};

        character[2] = new boolean[]{true, false, false, false, true};

        character[3] = new boolean[]{true, true, true, true, true};

        character[4] = new boolean[]{true, false, false, false, true};

        character[5] = new boolean[]{true, false, false, false, true};

        character[6] = new boolean[]{true, false, false, false, true};

        alphabet.add(character);


        // I

        character = new boolean[7][5];

        character[0] = new boolean[]{false, false, true, false, false};

        character[1] = new boolean[]{false, false, true, false, false};

        character[2] = new boolean[]{false, false, true, false, false};

        character[3] = new boolean[]{false, false, true, false, false};

        character[4] = new boolean[]{false, false, true, false, false};

        character[5] = new boolean[]{false, false, true, false, false};

        character[6] = new boolean[]{false, false, true, false, false};

        alphabet.add(character);


        // J

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{false, false, false, false, true};

        character[2] = new boolean[]{false, false, false, false, true};

        character[3] = new boolean[]{false, false, false, false, true};

        character[4] = new boolean[]{false, false, false, false, true};

        character[5] = new boolean[]{true, false, false, false, true};

        character[6] = new boolean[]{false, true, true, true, false};

        alphabet.add(character);


        // K

        character = new boolean[7][5];

        character[0] = new boolean[]{true, false, false, true, false};

        character[1] = new boolean[]{true, false, true, false, false};

        character[2] = new boolean[]{true, true, false, false, false};

        character[3] = new boolean[]{true, true, false, false, false};

        character[4] = new boolean[]{true, false, true, false, false};

        character[5] = new boolean[]{true, false, false, true, false};

        character[6] = new boolean[]{true, false, false, false, true};

        alphabet.add(character);


        // L

        character = new boolean[7][5];

        character[0] = new boolean[]{true, false, false, false, false};

        character[1] = new boolean[]{true, false, false, false, false};

        character[2] = new boolean[]{true, false, false, false, false};

        character[3] = new boolean[]{true, false, false, false, false};

        character[4] = new boolean[]{true, false, false, false, false};

        character[5] = new boolean[]{true, false, false, false, false};

        character[6] = new boolean[]{true, true, true, true, true};

        alphabet.add(character);

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und hier der Rest vom Schützenfest, da der komplette Code scheinbar zu lang ist.


        // M

        character = new boolean[7][5];

        character[0] = new boolean[]{true, false, false, false, true};

        character[1] = new boolean[]{true, true, false, true, true};

        character[2] = new boolean[]{true, false, true, false, true};

        character[3] = new boolean[]{true, false, false, false, true};

        character[4] = new boolean[]{true, false, false, false, true};

        character[5] = new boolean[]{true, false, false, false, true};

        character[6] = new boolean[]{true, false, false, false, true};

        alphabet.add(character);


        // N

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, false, false, true};

        character[1] = new boolean[]{true, true, false, false, true};

        character[2] = new boolean[]{true, false, true, false, true};

        character[3] = new boolean[]{true, false, true, false, true};

        character[4] = new boolean[]{true, false, true, false, true};

        character[5] = new boolean[]{true, false, false, true, true};

        character[6] = new boolean[]{true, false, false, true, true};

        alphabet.add(character);


        // O

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{true, false, false, false, true};

        character[2] = new boolean[]{true, false, false, false, true};

        character[3] = new boolean[]{true, false, false, false, true};

        character[4] = new boolean[]{true, false, false, false, true};

        character[5] = new boolean[]{true, false, false, false, true};

        character[6] = new boolean[]{true, true, true, true, true};

        alphabet.add(character);


        // P

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{true, false, false, false, true};

        character[2] = new boolean[]{true, false, false, false, true};

        character[3] = new boolean[]{true, true, true, true, true};

        character[4] = new boolean[]{true, false, false, false, false};

        character[5] = new boolean[]{true, false, false, false, false};

        character[6] = new boolean[]{true, false, false, false, false};

        alphabet.add(character);


        // Q

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{true, false, false, false, true};

        character[2] = new boolean[]{true, false, false, false, true};

        character[3] = new boolean[]{true, false, false, false, true};

        character[4] = new boolean[]{true, false, true, false, true};

        character[5] = new boolean[]{true, false, false, true, true};

        character[6] = new boolean[]{true, true, true, true, true};

        alphabet.add(character);


        // R

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{true, false, false, false, true};

        character[2] = new boolean[]{true, false, false, false, true};

        character[3] = new boolean[]{true, true, true, true, true};

        character[4] = new boolean[]{true, false, true, false, false};

        character[5] = new boolean[]{true, false, false, true, false};

        character[6] = new boolean[]{true, false, false, false, true};

        alphabet.add(character);


        // S

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{true, false, false, false, false};

        character[2] = new boolean[]{true, false, false, false, false};

        character[3] = new boolean[]{true, true, true, true, true};

        character[4] = new boolean[]{false, false, false, false, true};

        character[5] = new boolean[]{false, false, false, false, true};

        character[6] = new boolean[]{true, true, true, true, true};

        alphabet.add(character);


        // T

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{false, false, true, false, false};

        character[2] = new boolean[]{false, false, true, false, false};

        character[3] = new boolean[]{false, false, true, false, false};

        character[4] = new boolean[]{false, false, true, false, false};

        character[5] = new boolean[]{false, false, true, false, false};

        character[6] = new boolean[]{false, false, true, false, false};

        alphabet.add(character);


        // U

        character = new boolean[7][5];

        character[0] = new boolean[]{true, false, false, false, true};

        character[1] = new boolean[]{true, false, false, false, true};

        character[2] = new boolean[]{true, false, false, false, true};

        character[3] = new boolean[]{true, false, false, false, true};

        character[4] = new boolean[]{true, false, false, false, true};

        character[5] = new boolean[]{true, false, false, false, true};

        character[6] = new boolean[]{true, true, true, true, true};

        alphabet.add(character);


        // V

        character = new boolean[7][5];

        character[0] = new boolean[]{true, false, false, false, true};

        character[1] = new boolean[]{true, false, false, false, true};

        character[2] = new boolean[]{true, false, false, false, true};

        character[3] = new boolean[]{false, true, false, true, false};

        character[4] = new boolean[]{false, true, false, true, false};

        character[5] = new boolean[]{false, true, false, true, false};

        character[6] = new boolean[]{false, false, true, false, false};

        alphabet.add(character);


        // W

        character = new boolean[7][5];

        character[0] = new boolean[]{true, false, false, false, true};

        character[1] = new boolean[]{true, false, false, false, true};

        character[2] = new boolean[]{true, false, false, false, true};

        character[3] = new boolean[]{true, false, true, false, true};

        character[4] = new boolean[]{true, false, true, false, true};

        character[5] = new boolean[]{true, false, true, false, true};

        character[6] = new boolean[]{false, true, false, true, false};

        alphabet.add(character);


        // X

        character = new boolean[7][5];

        character[0] = new boolean[]{true, false, false, false, true};

        character[1] = new boolean[]{false, true, false, true, false};

        character[2] = new boolean[]{false, true, false, true, false};

        character[3] = new boolean[]{false, false, true, false, false};

        character[4] = new boolean[]{false, true, false, true, false};

        character[5] = new boolean[]{false, true, false, true, false};

        character[6] = new boolean[]{true, false, false, false, true};

        alphabet.add(character);


        // Y

        character = new boolean[7][5];

        character[0] = new boolean[]{true, false, false, false, true};

        character[1] = new boolean[]{true, false, false, false, true};

        character[2] = new boolean[]{false, true, false, true, false};

        character[3] = new boolean[]{false, false, true, false, false};

        character[4] = new boolean[]{false, false, true, false, false};

        character[5] = new boolean[]{false, false, true, false, false};

        character[6] = new boolean[]{false, false, true, false, false};

        alphabet.add(character);


        // Z

        character = new boolean[7][5];

        character[0] = new boolean[]{true, true, true, true, true};

        character[1] = new boolean[]{false, false, false, false, true};

        character[2] = new boolean[]{false, false, false, true, false};

        character[3] = new boolean[]{false, false, true, false, false};

        character[4] = new boolean[]{false, true, false, false, false};

        character[5] = new boolean[]{true, false, false, false, false};

        character[6] = new boolean[]{true, true, true, true, true};

        alphabet.add(character);


        // Template

        character = new boolean[7][5];

        character[0] = new boolean[]{false, false, false, false, false};

        character[1] = new boolean[]{false, false, false, false, false};

        character[2] = new boolean[]{false, false, false, false, false};

        character[3] = new boolean[]{false, false, false, false, false};

        character[4] = new boolean[]{false, false, false, false, false};

        character[5] = new boolean[]{false, false, false, false, false};

        character[6] = new boolean[]{false, false, false, false, false};

        alphabet.add(character);

     }

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich glaub wir reden aneinander vorbei. Ich muss nichts berechnen, ich lese einfach aus.

Ich erhalte ein Array von lauter 0 und 1en. Eine 1 da wo in der Graphik ein Punkt ist und eine 0 wo keiner ist. Dann durchlaufe ich das Array mit modulo ZEICHENBREITE (+ abstand zwischen den Zeichen) und habe somit jedes Zeichen in das Array (bzw. Liste) gepackt. Diese Liste wandle ich in einem 2. Schritt in mein eigens Zeichformat um. 0 = . und 1 entspricht #.

Die Darstellung dieser Daten ist nun nicht mehr das Problem, bzw. die Darstellung ist bereits geloest.

Mein Problem war eher wie ich mit Java am einfachsten ein BMP File auseinander nehmen kann, ob Java mir da von Haus aus was mit gibt oder ob ich das Fileformat selbst implementieren muss. Das hat sich auch erledigt, denn ich habe eine Möglichkeit gefunden, die Zeichensätze als RAW Daten abzuspeichern, wobei ein Byte ein Pixel entspricht - PhotoShop kann das sehr gut.

Gruesse

Mr "Pixelschubser vom Dienst" Magix

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, dann sag ich Dir, was ich verstanden habe: Du schreibst das Alphabet mit Paint (oder einem anderen Grafikprogramm) und erzeugst ein Bitmap. Das Bitmap willst Du dann auslesen - also den Buchstaben nehmen, feststellen, ob ein bestimmtes Pixel schwarz oder weiss ist und dann in Deine Matrix übernehmen - und mit der entstehenden Struktur Deinen "Zeichensatz" befüllen.

Das kann - wie ich oben erklärt habe - nicht funktionieren.

Wenn es Dir darum geht, wie Du mit Java aus einem Bitmap eine Pixelinformation bekommst: Das kann ich Dir nicht beantworten.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...