Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Arbeiten mit AK-Lib unter DOS, VESA-Modi, Laden von GIF87a
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
drz



Anmeldungsdatum: 31.07.2013
Beiträge: 14

BeitragVerfasst am: 31.07.2013, 16:52    Titel: Arbeiten mit AK-Lib unter DOS, VESA-Modi, Laden von GIF87a Antworten mit Zitat

Hallo lieber QB-Gemeinde,

ich bedanke mich schonmal vorab für alle Hilfe, die ich hier hoffentlich erhalten werde.

Was möchte ich tun:

- Mein Menüprogranmm soll Verzeichnisse auslesen in denen Kataloge von Diskettenimages abgelegt sind.

- Der Katalog-Inhalt aller Diskettenimages ist in einer Textdatei gespeichert. Wird ein Diskettenimage ausgewählt, soll der Inhalt des Diskettenimages aus der Katalogdatei angezeigt werden.

- Zusätzlich hat jedes Diskettenimage ein Logo, welches als einzelne Grafikdatei vorliegt und auch angezeigt werden soll.

- Es soll eine Suchfunktion für die Inhalte der Textdatei vorhanden sein. Sucht man ein bestimmtes Programm, soll das Diskettenimage angezeigt werden.

- Sofern man das gewünschte Diskettenimage gefunden hat, soll per Knopfdruck ein zurückschreiben des Images im Floppy A: ermöglicht werden. Die Programme zum zurückschreiben (3 Stück) sind vorhanden.

- Das Ganze soll in Dos mit Vesa Mod 105 (1024x768x256F) programmiert werden.

- Ich verwende QuickBasic 4.5 und AKLIB14B


Bisher habe ich das hinbekommen:
Code:

DECLARE SUB XSCREEN
DECLARE SUB XCOLOR
DECLARE SUB XLINE
DECLARE SUB LOAD.ARL
CALL XSCREEN(&H105)
LOAD.ARL ("8x16")
CALL XPRINT(315, 10, "** Compact-Disk-Writer für ATARI-Disk-Compelations **")
CALL XPRINT(75, 50, "F1 - Automation")
CALL XPRINT(75, 70, "F2 - Debug")
CALL XPRINT(75, 90, "F3 - Medway Boys")
CALL XPRINT(75, 110, "F4 - xxx")
CALL XPRINT(75, 130, "F5 - yyy")
CALL XPRINT(275, 50, "F6 - aaa")
CALL XPRINT(275, 70, "F7 - bbb")
CALL XPRINT(275, 90, "F8 - ccc")
CALL XPRINT(275, 110, "F9 - eee")
CALL XPRINT(275, 130, "F10 - fff")
CALL XPRINT(175, 175, "F11 - SUCHE [             ]")
CALL XPRINT(550, 50, "F1 - Automation")
CALL XPRINT(550, 70, "F2 - Debug")
CALL XPRINT(550, 90, "F3 - Medway Boys")
CALL XPRINT(550, 110, "F4 - xxx")
CALL XPRINT(550, 130, "F5 - yyy")
CALL XPRINT(750, 50, "F6 - aaa")
CALL XPRINT(750, 70, "F7 - bbb")
CALL XPRINT(750, 90, "F8 - ccc")
CALL XPRINT(750, 110, "F9 - eee")
CALL XPRINT(750, 130, "F10 - fff")
CALL XPRINT(650, 175, "F11 - SUCHE [             ]")
CALL XPRINT(10, 745, "Version 0.01 (C) 2013 by DRZ")
CALL XPRINT(900, 745, "Ende Alt+X")
CALL XLINE(75, 200, 475, 475, 15, "B")
CALL XLINE(550, 200, 950, 475, 15, "B")
CALL XPRINT(75, 485, "Ausgewähltes Disk-Image: [%Imagename%]")
CALL XPRINT(550, 485, "Ausgewähltes Disk-Image: [%Imagename%]")
CALL XPRINT(75, 520, "Spiel 01: %1")
CALL XPRINT(75, 540, "Spiel 02: %2")
CALL XPRINT(75, 560, "Spiel 03: %3")
CALL XPRINT(75, 580, "Spiel 04: %4")
CALL XPRINT(75, 600, "Spiel 05: %5")
CALL XPRINT(75, 620, "Spiel 06: %6")
CALL XPRINT(75, 640, "Spiel 07: %7")
CALL XPRINT(75, 660, "Spiel 08: %8")
CALL XPRINT(75, 680, "Spiel 09: %9")
CALL XPRINT(75, 700, "Spiel 10: %10")
CALL XPRINT(550, 520, "Spiel 01: %1")
CALL XPRINT(550, 540, "Spiel 02: %2")
CALL XPRINT(550, 560, "Spiel 03: %3")
CALL XPRINT(550, 580, "Spiel 04: %4")
CALL XPRINT(550, 600, "Spiel 05: %5")
CALL XPRINT(550, 620, "Spiel 06: %6")
CALL XPRINT(550, 640, "Spiel 07: %7")
CALL XPRINT(550, 660, "Spiel 08: %8")
CALL XPRINT(550, 680, "Spiel 09: %9")
CALL XPRINT(550, 700, "Spiel 10: %10")
'CALL SET.PICTURE(75, 175, "Bild%1")
'CALL SET.PICTURE(550,175, "Bild%2")


Beste Grüße
Doc

Editiert durch Moderator: Ursprünglichen Betreff "Projekt im Kopf aber keine Ahnung vom Programmieren" durch etwas aussagekräftigere Themenbeschreibung ersetzt. (Sebastian)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
drz



Anmeldungsdatum: 31.07.2013
Beiträge: 14

BeitragVerfasst am: 31.07.2013, 16:58    Titel: Antworten mit Zitat

Hier meine ersten Fragen:

1. Warum wird der Text "Enter Drücken zum Zurückkehren" der erschein, wenn ich das Programm starte in H105 zerissen und nicht korrekt dargestellt), wenn ich 101 nehme (640x480) ist der Text lesbar.

2. In der Konzeption habe ich reine Tastaturbedienung vorgesehen. Um den Platz optimal zu nutzen habe ich zwei Fenster für Logos vorgesehen.
a) Wäre es sinnvoll zwischen links und rechts hin und her schalten zu können, also so wie beim NC unter Dos ?
b) Oder sollte ich lieber F1 links und "Shift-F1" rechts zur Katalogauswahl vorsehen. (also keine Umschaltung ala NC)

Im Moment favorisiere ich die Variante b!

3. Ich habe Probleme bei der Darstellung von Grafiken. Meine Logos sind GIF, aber nicht GF87a, wenn ich BMP nehme werden die Bilder viel zu groß (GIF 14KB, BMP 120KB)

Danke Euch
Doc
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5900
Wohnort: Deutschland

BeitragVerfasst am: 31.07.2013, 20:46    Titel: Antworten mit Zitat

Hallo und willkommen im Forum!
drz hat Folgendes geschrieben:
1. Warum wird der Text "Enter Drücken zum Zurückkehren" der erschein, wenn ich das Programm starte in H105 zerissen und nicht korrekt dargestellt), wenn ich 101 nehme (640x480) ist der Text lesbar.

Da der Text im geposteten Programm gar nicht vorkommt, nehme ich mal an, dass es sich um den Hinweis handelt, der von QB am Ende der Ausführung ausgegeben wird, also zwischen Ende der Interpretation und Rückkehr in die IDE.

QB kann mit den VESA-Modi und den hohen Auflösungen natürlich nicht richtig umgehen. 640x480 kann QB zwar auch nur in 4-Bit Farbtiefe darstellen (entspricht SCREEN 12 / VGA), aber immerhin die Größe / Zeichengröße passt. Von daher würde ich vermuten, dass QB deshalb bis 640x480 noch selber sinnvoll Ausgaben darstellen kann. Was darüber hinausgeht (z. B. die angesprochenen 1024x768) kann QB selber nicht handlen. QB hat ja quasi nur sein eigenes "PRINT" zur Verfügung und nicht das XPRINT aus der AK-Lib. Der XPRINT-Befehl der AK-Lib ist von AK selber implementiert und muss verwendet werden, wenn eine Auflösung mit XSCREEN gesetzt wird. Die normalen Bildschirmausgaben mit PRINT und INPUT sind dann nicht mehr verwendbar. QB kann das natürlich nicht wissen und kann auch nicht für seine eigenen Ausgaben auf die AK-Lib zugreifen.

Wenn das Programm als compilierte EXE ausgeführt wird (und nicht mit F5 aus QB heraus interpretiert wird), erscheint der Hinweis am Ende nicht.

Zitat:
Um den Platz optimal zu nutzen habe ich zwei Fenster für Logos vorgesehen.

Wie ist das gemeint? Zwei Fenster? Unter DOS ist der gesamte Bildschirm ein einziges Fenster und mehrere angeschlossene Bildschirme können von Haus aus nicht unabhängig voneinander mit unterschiedlichen Fenstern belegt werden.

Wenn gemeint ist, den Bildschirm einfach in 2 Bereiche zu unterteilen: Das ist problemlos möglich, aber wieso hilft das bei der Platznutzung? Doch eher im Gegenteil, weil für die Rahmen und den "Fenster"-Abstand Pixel draufgehen.

Zitat:
b) Oder sollte ich lieber F1 links und "Shift-F1" rechts zur Katalogauswahl vorsehen. (also keine Umschaltung ala NC)

Im Moment favorisiere ich die Variante b!

Das kann man sich als Programmierer ja beliebig aussuchen. Wichtig ist nur, dass man auf der Oberfläche irgendwie kenntlich macht, was der User tun/drücken soll.

Zitat:
3. Ich habe Probleme bei der Darstellung von Grafiken. Meine Logos sind GIF, aber nicht GF87a, wenn ich BMP nehme werden die Bilder viel zu groß (GIF 14KB, BMP 120KB)

Es gibt diverse Grafikloader für QB. Die könnte man dahingehend verändern, dass sie nicht, wie wahrscheinlich meistens der Fall, PSET aus QB verwenden, sondern das XPSET der AK-Lib. Ist insgesamt aber recht umständlich.

Viel einfacher wäre es wohl, ein Programm zu suchen, das GIF87a-Dateien ausgeben kann (z. B. indem es BMP-Dateien konvertiert). Nach ca. 30 Sekunden Google-Recherche zwinkern bin ich z. B. auf diese Software hier gestoßen: http://www.pictview.com/descript.htm (siehe auch: File formats that PictView can export, dort heißt es: "GIF - Compuserve Interchange File Format, including GIF87 and GIF89")
Bzgl. der Software kann ich leider nicht sagen, was davon zu halten ist oder ob der Anbieter seriös ist, aber von der Funktion her scheint es zumindest zu passen. Im Changelog steht ab Version 1.92 "Features added: option for creating GIF87a or GIF89a".

Übrigens, FreeBASIC könnte evtl. auch interessant sein für das Projekt. Es kann auch DOS-Anwendungen erzeugen und hat viele von QBs Einschränkungen und Macken nicht.

Viele Grüße!
Sebastian
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
drz



Anmeldungsdatum: 31.07.2013
Beiträge: 14

BeitragVerfasst am: 31.07.2013, 22:39    Titel: Antworten mit Zitat

Hallo Sebastian!

Danke für die Antwort. Ich konnte zwischenzeitlich mit XNVIEW passende GIFs erstellen.

DECLARE SUB SET.PICTURE
CALL SET.PICTURE(77,162, "MED_002.GIF")


Es kommt keine Fehlermeldung aber auch kein Bild. Ich habe gem. Anleitung gearbeitet. Habe ich etwas vergessen ?

Danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5900
Wohnort: Deutschland

BeitragVerfasst am: 31.07.2013, 23:04    Titel: Antworten mit Zitat

drz hat Folgendes geschrieben:
Code:
DECLARE SUB SET.PICTURE
CALL SET.PICTURE(77,162, "MED_002.GIF")

Es kommt keine Fehlermeldung aber auch kein Bild. Ich habe gem. Anleitung gearbeitet. Habe ich etwas vergessen ?


Hallo,

wenn die GIF-Datei in Ordnung ist, könnte es am Pfad liegen. Eventuell liegt die Bilddatei nicht im Arbeitsverzeichnis des Programms. Das Arbeitsverzeichnis ist nicht notwendigerweise das Verzeichnis, in dem die EXE-Datei liegt.

Siehe zum Beispiel: QBasic-MonsterFAQ-Eintrag "Wie ermittle ich den Pfadnamen des gerade aktuellen Verzeichnisses?"

Um auszuschließen, dass es am Arbeitsverzeichnis bzw. am relativen Pfad liegt, könnte man einen absoluten Pfad probieren:
Code:
CALL SET.PICTURE ( 77, 162, "C:\TEST\MEINPROG\MED_002.GIF" )


Alternativ könnte man den relativen Pfad bei SET.PICTURE verwenden und zuvor mit CHDIR ins Wunschverzeichnis wechseln. (Siehe Wikibook: CHDIR)

Viele Grüße!
Sebastian
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
drz



Anmeldungsdatum: 31.07.2013
Beiträge: 14

BeitragVerfasst am: 31.07.2013, 23:06    Titel: Antworten mit Zitat

Die Fehlermeldung ist doch da, aber halt nur in Modus 101 zu lesen.

"Bad Screen descriptor."

Doc

EDIT: Ist wohl dann der Fall wenn "0" nicht transparent ist ?
Zitat:
If A$ <> "GIF87a" Then Print "Not a GIF87a file.": End
Get #1, , TotalX: Get #1, , TotalY: GoSub GetByte
NumColors = 2 ^ ((A% And 7) + 1): NoPalette = (A% And 128) = 0
GoSub GetByte: Background = A%
GoSub GetByte: If A% <> 0 Then Print "Bad screen descriptor.": End
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
drz



Anmeldungsdatum: 31.07.2013
Beiträge: 14

BeitragVerfasst am: 01.08.2013, 00:00    Titel: Antworten mit Zitat

PCX und BMP gehen zwar, aber ich habe ja zwei Bilder gleichzeitig, da kommen sich die Paletten in die Quere. Die Bilder haben i.d.R. 32-64 echte Farben. Kann man das so machen, dass die sich nicht in die Quere kommen, oder muss ich dann zwangsläufig 32K oder 64K Farben-Modi nehmen.

Doc
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5900
Wohnort: Deutschland

BeitragVerfasst am: 01.08.2013, 00:01    Titel: Antworten mit Zitat

Hm, scheinbar ist die erzeugte GIF-Datei doch nicht so optimal für die AK-Lib.

Der Screen-Descriptor ist Teil des GIF-Datei-Headers, wie aus der GIF-Dateiformatspezifikation hervorgeht:

Die Spezifikation hat Folgendes geschrieben:
The Screen Descriptor describes the overall parameters for all GIF images following. It defines the overall dimensions of the image space or logical screen required, the existance of color mapping information, background screen color, and color depth information. This information is stored in a series of 8-bit bytes as described below.


Für das Byte nach "background" sehe ich in der Spezifikation ein Byte, das nur aus 0-Bits besteht:
Code:
|0 0 0 0 0 0 0 0|  7        map or default map if none specified)


Der im Ausschnitt gepostete Code geht davon aus (quasi Assertion), dass das Byte 0 ist. Wie es dazu kommt, dass das nicht der Fall ist, kann ich spontan nicht sagen. Dafür müsste ich die Spezifikation erst mal genauer durcharbeiten.

Vielleicht versuchst du einfach noch mal eine andere Software statt XNView.

Viele Grüße!
Sebastian
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5900
Wohnort: Deutschland

BeitragVerfasst am: 01.08.2013, 00:02    Titel: Antworten mit Zitat

drz hat Folgendes geschrieben:
PCX und BMP gehen zwar, aber ich habe ja zwei Bilder gleichzeitig, da kommen sich die Paletten in die Quere. Die Bilder haben i.d.R. 32-64 echte Farben. Kann man das so machen, dass die sich nicht in die Quere kommen, oder muss ich dann zwangsläufig 32K oder 64K Farben-Modi nehmen.


Alle Bilder, die gleichzeitig zu sehen sein sollen, müssen in den Paletten-Modi (<= 8 Bit) dieselbe Palette verwenden, d.h. teilen.
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
drz



Anmeldungsdatum: 31.07.2013
Beiträge: 14

BeitragVerfasst am: 01.08.2013, 00:15    Titel: Antworten mit Zitat

Hier mal bspw. wie diese Bilder aussehen. Bild 1+2 gleichzeitig wird mit 8 Bit Farbtiefe wohl nix, selbst wenn ich die runterkonvertiere auf die 16 echten Farben die die wirklich haben...man weis ja nie welche Kombination gleichzeitig dann auf dem Bildschirm zu sehen ist.

http://www.spiny.org/medway/medway_1_10.html
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5900
Wohnort: Deutschland

BeitragVerfasst am: 01.08.2013, 01:18    Titel: Antworten mit Zitat

drz hat Folgendes geschrieben:
Bild 1+2 gleichzeitig wird mit 8 Bit Farbtiefe wohl nix, selbst wenn ich die runterkonvertiere auf die 16 echten Farben die die wirklich haben...man weis ja nie welche Kombination gleichzeitig dann auf dem Bildschirm zu sehen ist.

Bei 8 Bit Farbtiefe können 256 verschiedene Farben gleichzeitig dargestellt werden. Damit man so beliebig viele Bilder gleichzeitig anzeigen kann, ohne Farbkonflikte durch unterschiedliche Paletten zu bekommen, hat man früher eine allgemeine Farbpalette vereinbart. Das heißt, man benutzt eine Palette, die möglichst alle Farben so halbwegs abdeckt und damit auch für alle Bilder einigermaßen passt. Man verzichtet also darauf, die Palette auf jedes einzelne Bild hin zu optimieren.

Im Folgenden mal 2 Versionen desselben Bildes:


Man kann erkennen, dass die Bildqualität bei der Windows-Standardtabelle, die nicht auf dieses spezielle Bild zugeschnitten ist, nicht so gut ist wie bei dem Bild mit optimierter Palette. Allerdings ermöglicht es diese Paletten-Kompromiss-Findung, beliebige Bilder (z. B. Waldbilder mit viel grün, Meeresbilder mit Blautönen, Lagerfeuer mit rot und gelb, ...) gleichzeitig in einem palettenindizierten Modus darzustellen.

Wenn deine Bilder alle nur 16-32 tatsächlich verschiedene Farben enthalten, wird es wohl nicht so problematisch sein, sie z. B. auf die Windows-Standardpalette umzurechnen.

Übrigens: Die beiden Schmetterlingsbilder, die ich verlinkt habe, sind GIF87a-Dateien. Du könntest mal probieren, diese mit der AK-Lib und SET.PICTURE darzustellen.

Alternativ könnte man natürlich auch einen True-Color-Grafikmodus (24-Bit) verwenden. Dann kann man sich das ganze Hantieren mit Paletten sparen. Allerdings kann es mit den True-Color-Modi noch mehr Grafikkarten-Kompatibilitätsprobleme geben als mit den einfacheren.

Viele Grüße!
Sebastian
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
drz



Anmeldungsdatum: 31.07.2013
Beiträge: 14

BeitragVerfasst am: 01.08.2013, 23:17    Titel: Antworten mit Zitat

Aufgrund der massiven Probleme, habe ich mich dazu entschieden, die hohe Auflösung und die "zwei-Fenster-Variante" nicht weiter zu verfolgen.
Ich habe jetzt nur noch ein Fenster und eine entsprechend kleinere Auflösung (101).

Wie kann ich meine Textfarbe (weiss) schützen. Bei bestimmten Bildern ist mein Text weg.(schwarzer Adler auf schwarzem Grund zwinkern )

Eine ganz wichtige Frage ist, wie ich meine Disk-Image-Kataloge in mein Programm integriere. Wie macht man sowas sinnigerweise ?

Im moment habe ich:
\DISKS\AUT\AUT001...500.ST (= Diskettenimage-Dateien)
\DISKS\MED\MED001...140.ST (= Diskettenimage-Dateien)
etc.
\LISTS\AUT\AUT.TXT
\LISTS\MED\MED.TXT
etc.
\LOGOS\AUT\AUT001...500.GIF (Logodateien)
\LOGOS\MED\MED001...140.GIF (Logodateien)

In den Listen stände dann bspw:
AUT001.ST; TestDrive;Goldrunner, IK+ ....

Wäre es sinnvoll sich NUR auf die Textdatei zu konzentrieren und von dort alles auslesen ? Also Name des Diskimages, Einzelne Spiele auf dem Diskimage, Logodatei des Images.

Oder sollte man QB45 die Verzeichnisse auslesen und zu erst nach dem Dateinamen suchen und dann diesen Dateiname in der Liste ausfindig zu machen und im Anschluß daran, dann die Inhalte aus der Liste zu ziehen und das Logo anzuzeigen.

Danke
Doc


Zuletzt bearbeitet von drz am 02.08.2013, 06:56, insgesamt 3-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 02.08.2013, 03:35    Titel: Antworten mit Zitat

drz hat Folgendes geschrieben:
Wie kann ich meine Textfarbe (weiss) schützen. Bei bestimmten Bildern ist mein Text weg.(schwarzer Adler auf schwarzem Grund zwinkern )

Das wird sicher daran liegen, dass deine Bilder unterschiedliche Farbpaletten haben und somit die Farbe, die du für Text verwendest (z.B. 15) eben nicht immer weiß ist. Wie Sebastian schon angedeutet hast, die ganzen Probleme hättest du mit FreeBASIC nicht, da du dort auch mit den Standard-Zeichenbefehle hohe Auflösungen und auch mehr als 256 Farben erzielen kannst.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
drz



Anmeldungsdatum: 31.07.2013
Beiträge: 14

BeitragVerfasst am: 02.08.2013, 07:00    Titel: Antworten mit Zitat

Ich brauche zwingend DOS, kein Windows. Kann ich FreeBasic dennoch verwenden. Es ist mir schon klar, dass sofern man Windowslastig unterwegs ist, man bspw. vorgegebene Farbpaletten hat, die ggf. geschützt sind.

Da meine Programme zum Zurückschreiben der Images aber NUR unter reinem Dos funktionieren, bin ich zwingend auf Dos angewiesen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5900
Wohnort: Deutschland

BeitragVerfasst am: 02.08.2013, 11:50    Titel: Antworten mit Zitat

Hallo!

drz hat Folgendes geschrieben:
Wie kann ich meine Textfarbe (weiss) schützen. Bei bestimmten Bildern ist mein Text weg.(schwarzer Adler auf schwarzem Grund zwinkern )

Ostfriesische Kriegsflagge: Weißer Adler auf weißem Grund! lächeln

Wie schon beschrieben, kommt es völlig auf die Palette an. Am einfachsten machst du es dir, wenn du mit einem Bildbearbeitungsprogramm für alle deine Bilder/Logos die gleiche Palette festlegst. Beispielsweise könntest du für alle Bilder die Windows-Standard-8-Bit-Palette festlegen.



Wenn alle Bilder die gleiche Palette teilen, was nicht mit Einbußen bei der Bildqualität einhergehen muss, ist auch die Farbe weiß immer auf dem gleichen Index zu finden, egal, welches Bild gerade geladen wird.

Bspw. im sehr alten Paint Shop Pro 5 kann man die Palette eines Bildes auch als Datei exportieren und dann anschließend für andere Bilder übernehmen:



Dabei sollte man dann natürlich darauf achten, dass die so zum Standard erkorene Palette auch wirklich für alle Bilder passt. Wenn sie nur Blautöne enthält, wird es schwierig mit Waldbildern... zwinkern Mit den Standardpaletten fährt man aber üblicherweise ganz gut.

Zitat:
Eine ganz wichtige Frage ist, wie ich meine Disk-Image-Kataloge in mein Programm integriere. Wie macht man sowas sinnigerweise ?

Auch da gilt wieder, dass man 100 % künstlerische Freiheit hat als Programmierer. Viele Programme verwenden z. B. nur eine einzige Binärdatei als Ablage für ihre Datensätze. Dabei wird dann ein Dateiformat definiert wie:

Code:
Dateiheader
---
2 Byte QB-Integer Signatur
2 Byte QB-Integer Anzahl der Datensätze
2 Byte QB-Integer Prüfsumme (CRC oder so)

Einzelner Datensatz
---
2 Byte QB-Integer Dateinummer (Primärschlüssel)
4 Byte QB-Long Länge der Datei -> Variable DATLAENGE
2 Byte QB-Integer Prüfsumme (z. B. CRC, Internet Checksum oder so)
64 Byte String Dateiname (ggf. mit Leerzeichen aufgefüllt)
n Bytes Binärdaten (DATLAENGE mal 1 Byte lesen!)


Auf diese Weise kann man ganz viele Datensätze in nur einer Datei unterbringen und diese Datei dann z. B. weitergeben oder online zum Download anbieten.

Man kann aber auch für jeden Datensatz eine eigene Datei verwenden oder gleich mehrere (eine Datei für Metadaten (Autor, Veröffentlichungsjahr, ...), eine Datei fürs Logo und eine Datei fürs Diskettenimage).

Alle Ansätze haben ihre Vor- und Nachteile und man kann es sich so gestalten, wie man es am liebsten haben möchte.

Wenn man irgendwann 100.000 Datensätze hat und für jeden Datensatz mind. 1 Datei pflegt, wird man unter DOS vermutlich Probleme bekommen, weil ein FAT16-Dateisystem nur 65.536 Datei-Einträge speichern kann, wenn ich das richtig in Erinnerung habe. Wenn von tausenden Datensätzen auszugehen ist, wird die Variante mit vielen Dateien also unattraktiver.
Andererseits darf bei FAT16 eine Datei auch nur 2 GB groß werden. Das heißt, auch mit einer Datenbankdatei kann man nicht beliebig viele Einträge speichern, sondern müsste ggf. mehrere 2 GB große Dateien verwalten (DATBNK01, DATBNK02, ...).

Es kommt also ganz darauf an, mit welchen Datenmengen man rechnet, welche Performance-Prioritäten man fürs Lesen+Schreiben+Löschen von Datensätzen hat, welches Dateisystem zugrundeliegt, ob die Datenbank portabel sein soll (z. B. für einfaches Kopieren auf einen USB-Stick), und und und.

Zitat:
Ich brauche zwingend DOS, kein Windows. Kann ich FreeBasic dennoch verwenden.

Ja, FreeBASIC funktioniert auch unter DOS. Die DOS-Version des Compilers kann man hier herunterladen: FreeBASIC 0.90.1 für DOS

Wichtig ist aber, dass man einen DOS Extender wie CWSDPMI braucht: http://homer.rice.edu/~sandmann/cwsdpmi/index.html
Dann hat man auch die lästigen Speicherrestriktionen von QB nicht.

Es gibt übrigens auch Disketten-Image-Tools, die unter Windows funktionieren. Zum Beispiel: RawWrite 0.7
Wenn du Cygwin installierst, steht dir auch dd zur Verfügung (Beispiel).
Auch kann man in FreeBASIC direkt mit OPEN den Datenträger öffnen, also von der Abstraktion her "unterhalb" vom Dateisystem. Dazu habe ich hier im Forum mal einen Beispielcode gesehen, aber den habe ich gerade nicht finden können. Es gibt ihn aber irgendwo hier.

Viele Grüße!
Sebastian
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
drz



Anmeldungsdatum: 31.07.2013
Beiträge: 14

BeitragVerfasst am: 02.08.2013, 13:03    Titel: Antworten mit Zitat

Hallo und Danke!

- Das mit der Farbpalette ist einleuchtend, aber wir reden hier von 2.000! unterschiedlichen Bildern!

- Die ST/MSA IMages können nur mit STDisk oder MakeDisk zurückgeschrieben werden. DD/Rawwrite etc. gehen nicht.

- Die Datenbank mit den Images wird ca. 2GB einnehmen, was innerhalb der FAT16 Spezifikationen ist (sofern ich GIF und nicht BMP bei den Bildern verwenden muss)

- Es "könnte" sein, das auch ein Win95/98 aufgrund der Dosnähe bei den Schreibtools geht, allerdings ist das kritisch!

- TP70, QuickBasic, jetzt FreeBasic...ich glaube ich lande noch bei Assembler bevor ich irgendwas (halb)-fertiges habe ... zwinkern

- Der entscheidende Punkt bei der Verknüpfung der Textdatei mit den Images und den Bildern ist der Aufwand. Wenn ich alle Informationen, also Name der Disk, Logo der Disk, Inhalt der Disk in der Textdatei speichere, muss ich diese Zwangsläufig neu erstellen, was SEHR zeitaufwenig wäre.

Einfacher wäre es, ich lese den Namen des vorhandenen Disk-Images (*.ST) und danach wird nach einem Logo mit gleichem Dateinamen gesucht (*.GIF). Danach wird der Name in der Textdatei gesucht und von dort werden die Inhalte auf den Bildschirm gegeben.

Durch den Diskkatalog soll man mit den Pfeiltasten (Vor/zurück) blättern können und mit ENTER soll das gerade gewählte Disk-Image an das Rückschreibprogramm übergeben werden.

Doc
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 02.08.2013, 14:40    Titel: Antworten mit Zitat

drz hat Folgendes geschrieben:
- Das mit der Farbpalette ist einleuchtend, aber wir reden hier von 2.000! unterschiedlichen Bildern!

Genau deswegen ist es sinnlos, dafür einen indizierten Farbmodus zu verwenden. Natürlich kannst du auch versuchen, die Paletten so zu optimieren, dass zwei Farben immer hardgecodet sind oder du suchst dir aus der Farbpalette im Programm automatisch die dunkelste und die hellste Farbe für Text raus... Wenn du dir schon das 256-Farben-Limit aufbürdest, musst du auch ein bisschen kreativ sein. Das war bei indizierten Farbmodi schon immer nötig.

drz hat Folgendes geschrieben:
- TP70, QuickBasic, jetzt FreeBasic...ich glaube ich lande noch bei Assembler bevor ich irgendwas (halb)-fertiges habe ... zwinkern

Mit Assembler wird alles nur noch sehr viel komplizierter, das kann ich dir versprechen.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
drz



Anmeldungsdatum: 31.07.2013
Beiträge: 14

BeitragVerfasst am: 02.08.2013, 16:48    Titel: Antworten mit Zitat

Es muss nicht ZWINGEND der 256Farb-Modus sein. Nur bei 32K/64K Modi gibt es bei Quickbasic einen Freeze. Die Bilder haben zwar nur 16 Farben aber halt ganz unterschiedliche.

Ich drehe mich im Kreis, ohne das irgend was vorwärts geht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2459
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 02.08.2013, 19:29    Titel: Antworten mit Zitat

Von mir noch ein paar passende Artikel. Thema Farbpalette und Bilddateien:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/BilderVerwenden.html
http://www.dreael.ch/Deutsch/Download/WindowsBitmapBibliothek.html

Thema höhere Auflösungen anstelle von SCREEN 12/13:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/VESA-Schnittstelle.html

Und im Zusammenhang mit Diskettenabbilder:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/DOS-Interrupts.html

=> INT 13h ist übrigens Dein Freund und Helfer! => Ein eigenes RAWRITE.EXE in QB 4.5 ist damit keine komplizierte Sache, nimm als Vorlage das Festplattenlöschtool.

Übrigens noch zur Thematik MS-DOS und 16-Bit-Code: Alle 32-Bit-Windows-Versionen (selbst Windows 8!) besitzen noch die 16-Bit-Umgebung. Ein von mir verwendetes kleines Diskettenabbildtool läuft auch in dieser Umgebung ohne Fehler.

Vielleicht uns einmal das gesamte Projektumfeld (z.B. was für Disketten sind dies? Wofür braucht es die Bilder und hochauflösende Grafik, wo ansonsten fürs Disketten kopieren ebenso eine Textoberfläche genügen würde?) etwas genauer vorstellen, denn vielfach lassen sich auch alternative Lösungen finden, so dass es nicht Sinn macht, sich auf irgendwelche Umsetzungsdetails zu versteifen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
drz



Anmeldungsdatum: 31.07.2013
Beiträge: 14

BeitragVerfasst am: 03.08.2013, 01:09    Titel: Antworten mit Zitat

Hallo und danke für die Beiträge.

Worum geht es ?

Für einen klassischen Atari-ST Computer gibt es sehr viele Spiele/Software. Unter anderen gab es in den 90zigern Crackercrews die versucht haben, so viele Spiele/Programme/Demos wie möglich auf Atari-Disketten unterzubringen. Die Disketten-Images entsprechen dabei nicht immer den PC-Konventionen.

Diese "CD's" (ausgeschrieben Compact-Disks Kataloge) möchte ich gern übersichtlich in einer Oberfläche haben. Ich möchte suchen, bei welcher Crackercrew das Spiel "verarbeitert" wurde, und mir die Disketten zur Nutzung am echten Atari einfach zurückzuschreiben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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.

 Impressum :: Datenschutz