Forum: PC-Programmierung Grafik in der Konsole


von Simon K. (simon) Benutzerseite


Lesenswert?

Hi, ich benutze Microsoft Visual-C und suche eine Möglichkeit irgndwie
(windows NT basiertes Betriebssystem) Pixelweise in der Konsole zu
lesen.

Ich möchte also zB ein "A" in der Console ausgeben (printf) und
dieses mit 6*8 Pixel (breite/höhe) auslesen.

Hat einer ne idee? Eventuell könnte man im Grafikpuffer lesen, oder?

von Wolfram (Gast)


Lesenswert?

Das dürfte nicht so richtig was werden
Ich nehme an du willst Fonts abscannen. Die Font größe kann sehr
variieren. Schon zu DosZeiten 8x8 CGA 8*14EGA 8*16 VGA und einige mit
9*X von MDA.
Du könntest in ein Bitmap im Programm mit der gewünschten Schrift
schreiben und dieses Bitmap pixelweise abscannen. Die Fonteigenschaften
kannst du ja auch gleich abfragen. Das geht aber nicht mit printf
sondern mit Win32 API Funktionen. Du willst ja auch nicht auf den
Grafikkartenspeicher zugreifen sondern auf den Inhalt des Fensters.

Du könntest natürlich auch einen Screenshot machen als Bitmap
abspeichern und dann abscannen.

Oder du nimmst die Fontdateien auseinander.

Wenn du unbedingt auf der printf Ebene bleiben willst, es gibt da ein
paar BIOS Grafikfunktionen die dich an die Internen Fonts der
Grafikkarte ranlassen. Diese entsprechen allerdings nicht der
Darstellung im Fenster! sondern sind die die die Grafikkarte bei einem
BIOS Aufruf verwenden würde. Außerdem habe ich meine Zweifel was ein
Visual Studio 6/2002/2003 zu einem Biosaufruf aus einer Win32
Executable sagen würde.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Zunächst einmal:

Was genau ist das Ziel?

Geht es darum, die in einem Konsolfenster ausgegebenen Zeichen eines
Programmes zu lesen? Dafür gibt es Funktionen in der Win32-API, so daß
keine selbstgebastelte OCR erforderlich ist.

Ansonsten kann wie bei jedem anderem Windows-Fenster das Fensterhandle
des Konsolfensters bestimmt werden und mit einem der BitBlt-Befehle der
Inhalt in eine Memory-Bitmap kopiert werden, um auf die übliche Weise
verwurstet zu werden.

Sollte es hingegen nur darum gehen, die Bitmuster des verwendeten
Zeichensatzes zu erhalten - die Standardschriftart des Konsolenfensters
(bei der verschiedene Größen in Breite*Höhe angegeben werden) liegt in
einem dokumentierten Dateiformat (*.FON) vor, es dürfte weniger Aufwand
sein, die Bitmapdaten aus der betreffende Datei zu lesen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Also im Prinzip möchte ich mir schnell mein 7x5 Charset
zusammenbasteln.

Ich habs schon mit "Terminal" größe 6 in eine Picturebox (TImage
Equivalent unter Delphi) schreiben und anschließend auslesen,
allerdings ist das keine "genormte" 5x7 Schrift (Ich weiß, DIE
genormte gibt es nicht, aber der Zeichensatz für Alphanumerische LCDs
muss doch auch irgndwo zu bekommen sein?)

Ich glaub das mit dem Konsolenfenster war nicht so eine gute Idee ;)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das Dateiformat der *.fon-Dateien, die mit Windows mitgeliefert werden,
ist dokumentiert. Die für die Konsolfenster standardmäßig verwendete
Schrift ist im Verzeichnis c:\windows\fonts gespeichert (mit
Dateiattribut "versteckt") und heißt vga850.fon. Die anderen
Varianten sind für andere Codepages zuständig.

von Karl H. (kbuchegg)


Angehängte Dateien:

Lesenswert?

Was sagst das nicht gleich, dass du einen Font brauchst.

Vielleicht kannst Du mit dem angehaengten was anfangen.
7 Zeilen * 5 Spalten. Jedes Byte ist 1 Spalte. LSB ist
das unterste Pixel.

von Simon K. (simon) Benutzerseite


Lesenswert?

Ah jut, danke schonmal.

LSB unterstes Bit, gut. Und von links nach rechts nehme ich an? ;)

@Rufus:

Wo findet man denn eine Doku über FON schriftarten, nur zur Info? Habe
kurz die Suche betätigt, allerdings konnte ich nicht so das richtige
Suchwort finden.
Und diese vga850.fon finde ich ebenfalls nicht bei mir auf dem Rechner(
Ja, "Alle Dateien Anzeigen")

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.