|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 24.10.2004, 14:12 Titel: |
|
|
Mit OUT lässt sich sowohl unter SCREEN 1 als auch SCREEN 7 die Hintergrundfarbe nicht ändern. Der Paletteneintrag 0 bleibt dort immer schwarz und lässt sich nicht setzen. Auch alle 255 anderen Einträge ändern die Hintergrundfarbe (experimentell festgestellt) nicht. Ansonsten ist das eine ganz gute Möglichkeit. Im Textmodus SCREEN 0 hat die Schriftfarbe übrigens den Eintrag Nr. 7 und nicht wie man vielleicht annehmen könnte 1.
Als grafische Lösung fallen mir zwei Möglichkeiten ein.
Zum einen könnte man ganz einfach alle Pixel im Bereich der Schrift mittels zweier FOR...NEXT-Schleifen mit POINT durchprüfen und diejenigen die Hintergrundfarbe haben, mit PSET durch welche in der gewüschten Farbe ersetzen. Ist einfach zu verstehen, aber natürlich auch sehr langsam.
Man könnte aber auch zu Beginn einen Bildschirmbereich der so gross ist wie ein Zeichen (also z.B. 8x16 Pixel) mit der neuen Farbe füllen und mit GET z.B. in hg% speichern. Dann den Text ausgeben und den vorher gespeicherten Hintergrund Zeichen für Zeichen darüberlegen. Ungefähr so:
Zitat: |
SCREEN 12
DIM hg%(33)
hgfarbe = 1
LINE (0, 0)-(7, 15), hgfarbe, BF
GET (0, 0)-(7, 15), hg%
CLS
text$ = "Hallo Welt"
zeile = 8
spalte = 11
LOCATE zeile, spalte
PRINT text$
y = (zeile - 1) * 16
FOR zeichen = 1 TO LEN(text$)
x = (spalte + zeichen - 2) * 8
PUT (x, y), hg%, OR
NEXT
|
Bei 16 Farben und weisser Schrift kann man den Hintergund so direkt ersetzen, weil ja bei 15 schon alle vier Bit gesetzt sind und die OR-Verknüpfung daran nichts mehr ändert. Bei anderen Schriftfarben muss man etwas tricksen und evtl. auch das OR durch ein XOR oder so ersetzen.
Oder man verbindet beide Methoden. Man gibt einmal den gesamten Zeichensatz aus und ändert mit POINT/PSET den Hintergrund. Dann speichert man alle 8x8- bzw. 8x16-Felder mit GET in einem entsprechenden Array. Dann kann man anstelle von PRINT text$ die einzelnen Zeichen des Strings durch die vorher gespeicherten "Sprites" ersetzen und mit PUT ausgeben. Auf diese Art liessen sich auch andere Schriftarten importieren, die man zuvor z.B. als .bmp gespeichert hat. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 24.10.2004, 18:39 Titel: |
|
|
Skilltronic hat Folgendes geschrieben: | Man könnte aber auch zu Beginn einen Bildschirmbereich der so gross ist wie ein Zeichen (also z.B. 8x16 Pixel) mit der neuen Farbe füllen und mit GET z.B. in hg% speichern. Dann den Text ausgeben und den vorher gespeicherten Hintergrund Zeichen für Zeichen darüberlegen. |
Eigentlich exakt das macht meine Grafik-PRINT-Ersatzbibliothek. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
SN00py
Anmeldungsdatum: 24.10.2004 Beiträge: 4 Wohnort: Vinxel/Königswinter
|
Verfasst am: 25.10.2004, 10:40 Titel: |
|
|
Zitat: | Vielleicht wäre an dieser Stelle auch INT 10h, AX=1010h (einzelne Farbe im DAC-Register setzen wie PALETTE) und INT 10h, AX=1012h (mehrere Farben in den DAC-Registern setzen wie PALETTE USING) mit CALL INTERRUPT aufs VGA-BIOS eine willkommene Alternative. |
das wäre wohl die schnellste möglichkeit, die ich auch in meiner grafik unit für turbo benutze...
ansonsten kenn deine grafik lib ha die früher zu meinen qb zeiten selber verwendet...
mfg _________________ Ein Lächeln kann die Welt verzaubern, bringt ins Dunkel Sonnenschein, erfreut das Herz, erfreut die Sinne und man ist nicht ganz allein -- von mir |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|