Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Text in Handschrift umwandeln (https://www.delphipraxis.net/129540-text-handschrift-umwandeln.html)

cRayZo 20. Feb 2009 22:10


Text in Handschrift umwandeln
 
Hallo, ich möchte ein Programm schreiben, mit dem ich einen Text, (den ich zB in ein RichEdit kopiert habe) in (m)eine Handschrift konvertieren kann.
Ich habe dazu von Buchstaben oder Buchstabenkombinationen Bilder erstellt und gespeichert.

Jetzt ist nur die Frage, wie ich am besten an die Sache herangehe.
Das Programm soll ja nicht nur zeichenweise den Text konvertieren, und in einen canvas speichern(wäre ja nicht so schwer), sondern auch schauen, ob eine Zeichenreihe zB. "hallo" hintereinander stehen, und dann ein anderes Bild laden(da die verschiedenen Zeichen ja miteinander verbunden werden).

Habt ihr vielleicht eine Idee, wie man das am besten verwirklichen könnte? WÄre über Hilfe froh (einzelne Stichwörter sagen mir immer wenig, etwas Ausführung wäre nicht schlecht)


//edit:Soll ich die Bilder immer wenn ich sie brauche aus einer Datei laden? (stelle ich mir sehr kompliziert vor!) oder sie in das Programm implementieren? Wenn ja, wie macht man das?

himitsu 20. Feb 2009 22:20

Re: Text in Handschrift umwandeln
 
Es gibt doch viele TrueType-Editoren ... erstell einfach aus deiner Handschrift einen Font :angel2:

Edit: Stichwort Hier im Forum suchenRessourcen

[add]
du müßtest zu jedem Bild noch z.B. Start-/Endpunkt des Buchstaben speichern
und dann die Bilder so überlappen lassen (natürlich transparent, damit nix übermalt wird), daß die Punkte aneinander hängen ... also die Buchstaben zusammenhängen

cRayZo 20. Feb 2009 22:42

Re: Text in Handschrift umwandeln
 
genau mit sowas habe ichs schon mal versucht, diese schrift ist zu monoton und entspricht nicht meiner wirklichen Handschrift. zum Beispiel schreibt sie das "L" immer gleich, ob nuun in einem Wotr oder alleinstehend und wenn dann ist es immer das gleiche "L".
Wenn ich das von basis auf selbst programmiere, kann ich theoretisch belibiegt viele "L"s eingespeichert haben, von denen er sich per random eins aussucht, usw.. das bringt der schrift viel mehr Dynamik und vor allem Realität.

Versteht ihr was ich meine?
Wär super wenn ihr mir helfen könntet

sx2008 21. Feb 2009 01:48

Re: Text in Handschrift umwandeln
 
Du brauchst nicht nur einzelne Buchstaben, sondern auch Buchstabenkombinationen von häufigen Buchstabenfolgen (z.B. sch, st, en, ch, ll, tt, ss, ie, eu, au, ...).
Viele dieser Kombinationen müssen auch mit einem Großbuchstaben beginnen.
Dadurch kommt genügend "Leben" in die Handschrift, ohne dass du bei jedem Zeichen das Problem mit der Angleichung der Übergänge hast.
Du brauchst ungefähr: 26 kleinbuchstaben, 26 Großbuchstaben, 7 Umlaute, 10 Ziffern, ~ 15 Sonderzeichen und vielleicht noch 50 Doppel- und Dreifachbuchstabenkombinationen.
Das ganze Zeug legst du dann in einem Konstantenarray ab:
Delphi-Quellcode:
type
TLetterEntry = record
  t: string;
  pic: string;
end;

const letters: array[0..120] of TLetterEntry = (
(t: 'sch'; pic:'sch.bmp'),
(t: 'Sch'; pic:'sch_gr.bmp'),
(t: 'au'; pic:'au.bmp'),
...

(t: '9';  pic:'neun.bmp'),
(t: ' ';  pic:'blank.bmp')
);
// die Endung .bmp sollte später weggelassen werden (zu viel Schreibarbeit)
// ich wollte nur zeigen, dass hier die Bilder verankert sind
Die Dreifachkombinationen kommen zuerst, dann die Doppelbuchstaben und danach der Rest.
Wenn man das Array von Vorne durchsucht, findet man zuerst die Kombinationen, die ja gegenüber Einzelbuchstaben bevorzugt werden.
Wenn du soweit bist, dann sag Bescheid und ich zeig dir, wie man durch eine Erweiterung das Problem der Angleichung der Übergänge angehen kann.

Florian H 21. Feb 2009 08:40

Re: Text in Handschrift umwandeln
 
Am schlausten wäre es, wenn du die einzelnen Buchstaben nicht als Bild, sondern als Vektorgrafik vorliegen hast. Dann musst du nur Anfangs- und Endpunkt definieren und kannst die Buchstaben im Programm dann verbinden... also das Ende von Buchstabe 1 mit dem Anfang von Buchstabe zwei etc.
Dadurch dass es Vektordaten sind, kannst du auch leicht automatische, randomisierte Variationen erstellen, z.B. indem du Buchstaben leicht neigst, drehst oder verzerrst ...

Die Buchstaben scannst du dann entweder und vektorisierst sie dann, oder du liest sie direkt über ein Grafiktablett ein (sofern vorhanden).

Dann noch in ein Format wandeln, was dein Programm lesen kann und schon kanns losgehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz