MrMagix Geschrieben 28. September 2004 Geschrieben 28. September 2004 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 Zitieren
kLeiner_HobBes Geschrieben 29. September 2004 Geschrieben 29. September 2004 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. Zitieren
kingofbrain Geschrieben 29. September 2004 Geschrieben 29. September 2004 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 Zitieren
MrMagix Geschrieben 29. September 2004 Autor Geschrieben 29. September 2004 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 Zitieren
kingofbrain Geschrieben 29. September 2004 Geschrieben 29. September 2004 Selbst bei einem Font mit fester Breite ist ein o z.B. rund. Es ist zwar z.B. genau 5 breit und die Höhe mag auch noch stimmen, aber es ist immer noch rund. Wie berechnest Du daraus das Quadrat, das Du benötigst? Peter Zitieren
MrMagix Geschrieben 29. September 2004 Autor Geschrieben 29. September 2004 Da wird nichts berechnet - ich lese einfach stupide 5x7 pixel aus und fertig ist das Rechteck. A B C ..... Z ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... Oder uebersehe ich was? Zitieren
kingofbrain Geschrieben 29. September 2004 Geschrieben 29. September 2004 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); Zitieren
kingofbrain Geschrieben 29. September 2004 Geschrieben 29. September 2004 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); } } Zitieren
MrMagix Geschrieben 29. September 2004 Autor Geschrieben 29. September 2004 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 Zitieren
kingofbrain Geschrieben 29. September 2004 Geschrieben 29. September 2004 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 Zitieren
Empfohlene Beiträge
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.