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:

Get für Dateien verwenden

 
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
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 04.01.2005, 16:42    Titel: Get für Dateien verwenden Antworten mit Zitat

SOooooo,
also ich möchte gerne eine Datei (hier eine bmp-Datei) einlesen, und in einer Variablen abspeichern. Meiner Meinung nach müsste das mit GET doch gehen, also habe ich folgenden Code geschrieben:

Code:

Open "unbenannt" for binary as #1
get #1, 1, variable
close

print variable


eigentlich müsste doch alle dualzahlen der Datei in der variable abgespeichert sein, aber das funktioniert nicht.

Bitte helfen!! Danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 04.01.2005, 16:55    Titel: Antworten mit Zitat

Hi !
Für das einlesen von Bildern brauchst du einen Grafikloader !
Grafiklaoder gibts für .gif .bmp .jpeg ! Auf www.qbasic.de gibts verschiedene Grafikloader zum downloaden !

DK

(Links folgen gleich)
_________________
www.piratenpartei.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 04.01.2005, 16:57    Titel: Antworten mit Zitat

du kannst nicht eine ganze Datei einfach in eine Variable speichern. Du kannst die Datei nur Stückweise auslesen.. per LINE INPUT stringvar$ immer eine zeile, mit get ist das etwas umständlicher, das erklärt dir besser jemand anderes. Damit liest du die Datei binär/Byteweise aus.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 04.01.2005, 17:17    Titel: GET Antworten mit Zitat

Hallo.

Mit GET könnte man zwar eine ganze Datei in eine Variable einlesen, wenn die Datei max. 32KB groß ist, allerdings ist das relativ unsinnvoll.

Das ginge so:
Code:
OPEN "DATEI32K.BMP" FOR BINARY ACCESS READ AS #1
Inhalt$ = SPACE$(LOF(1))
GET #1,,Inhalt$
CLOSE #1
PRINT "Nun befindet sich die gesamte Datei in der Variable Inhalt$."


Wie MisterD schon sagte, liest man eine Datei wie ein BMP o.ä. immer stückchenweise ein, wenn man die Informationen (in diesem Fall Farbinformationen) rausholen will.

Wenn man die Datei aber lediglich replizieren will, kann man sie in bis zu 32KB großen Stücken gepuffert Kopieren. (Ich liebe dieses Thema... happy)

Jetzt sag erst mal, was du vorhast und dann können wir dir genauere Codebeispiele liefern. zwinkern

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ZaPPa



Anmeldungsdatum: 29.09.2004
Beiträge: 98
Wohnort: Wuppertal

BeitragVerfasst am: 04.01.2005, 17:17    Titel: Antworten mit Zitat

naja mit get is das einwenig anders!

erstens: get nimmt soweit ich weis nur STRING-Variable an(? korrigiert mich wenn ich falsch liege)



dann musst die länge des DatenStrings festsetzen!

also zum beispiel
Code:
 Daten$ = SPACE$(32)


so jetz hast du schonma 32 byte deklariert...

mit:
Code:
Open "unbenannt.bmp" for binary as #1
DO WHILE NOT EOF(1)
get #1, , variable
print variable
Loop
close



zeigst du jeweils 32Byte grösse blöcke an

eine BMP loader funktioniert aller dings anders!

MfG ZaPPa
_________________
--- ICH BIN DAGEGEN! ---
Jet_X hat Folgendes geschrieben:
Es währe mir sehr geholfen wenn ihr mir Helfen könnt !


And remember: Schwund is immer!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 04.01.2005, 17:22    Titel: Antworten mit Zitat

Hallo.

[Klugscheißmodus]

Zitat:
erstens: get nimmt soweit ich weis nur STRING-Variable an(? korrigiert mich wenn ich falsch liege)

Falsch, da GET binär einliest, gehen auch andere Datentypen. Du könntest auch INTEGER (2 Bytes, entspräche SPACE$(2)), LONG (4 Bytes, entspräche SPACE$(4)), DOUBLE, SINGLE oder CURRENCY (nur QBX) benutzen.
Allerdings verwendet man meistens STRING Variablen.

Zitat:
Code:
Open "unbenannt.bmp" for binary as #1

Ich sage nur "8.3"!

[/Klugscheißmodus]

zwinkern

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ZaPPa



Anmeldungsdatum: 29.09.2004
Beiträge: 98
Wohnort: Wuppertal

BeitragVerfasst am: 04.01.2005, 17:28    Titel: Antworten mit Zitat

sry korrigier
Code:
 OPEN "unbena~1.bmp" FOR BINARY AS #1


ok und das ander daten typen wusst ich nich!
_________________
--- ICH BIN DAGEGEN! ---
Jet_X hat Folgendes geschrieben:
Es währe mir sehr geholfen wenn ihr mir Helfen könnt !


And remember: Schwund is immer!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 04.01.2005, 17:29    Titel: Antworten mit Zitat

Ist ja nicht schlimm und böse gemeint war mein Antwortposting auch nicht! zwinkern
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ZaPPa



Anmeldungsdatum: 29.09.2004
Beiträge: 98
Wohnort: Wuppertal

BeitragVerfasst am: 04.01.2005, 17:35    Titel: Antworten mit Zitat

habsch auch net so aufgefasst grinsen
_________________
--- ICH BIN DAGEGEN! ---
Jet_X hat Folgendes geschrieben:
Es währe mir sehr geholfen wenn ihr mir Helfen könnt !


And remember: Schwund is immer!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 04.01.2005, 17:48    Titel: Antworten mit Zitat

So,
danke erstmal für die Antworten.

ALso, eigentlich möchte ich eine Laderoutine für bmp selber schreiben. Habe auch schon mich über den Aufbau informiert usw.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 04.01.2005, 17:53    Titel: Verschiedene fertige Loader Antworten mit Zitat

Hallo.

Auf www.iconsoft.de gibt es eine der besten / die beste Grafik-Lib für QB, die auch BMPs laden kann. Und das in rasend schneller Geschwindigkeit, da sie in Assembler geschrieben worden ist.

Eine andere Möglichkeit ist dreael's Windows-Bitmapbibliothek. Benutz einfach mal die Boardsuche. Sie ist "Open-Source" und ist fast wie ein Tutorial aufgebaut. Das dürfte genau das Richtige sein. lächeln

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 04.01.2005, 17:53    Titel: Antworten mit Zitat

ok, danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 07.01.2005, 16:57    Titel: Antworten mit Zitat

Hab mal noch ne Frage.

Ich bezieh mich dabei auf den Artikel in der wikipedia:
http://de.wikipedia.org/wiki/BMP

Also,
Ich habe einfach mit Paint ein Bitmap erstellt und mit ner Farbtiefe von 4 Bit abgespeichert (entspricht 16 Farben-Modus).

Im Artikel steht das bei 4 Bit die Bilddaten in zwei Teilen abgespeichert werden.
Einmal wird vom 55.Byte bis zum 118. Byte die Palette abgespeichert und der zweite Teil enthält dann die Daten der Bildzeilen, sprich welche Farbe der Pixel auf der Palette hat.

Das mit der Palette einlesen habe ich gut hinbekommen, aber beim zweiten Teil verstehe ich weinen
a) nicht was ein Offset ist, und wie ich da ran komme
b) kann ich das ganz normal wie Bytes einlesen also mit input$(2,1)??
c) wenn ich das wie Bytes einlesen kann, wie kann ich einen String mit 1Byte einlesen. mit input$ geht das ja nur bei 2,4 und 8 Byte länge.

Schon mal danke für eure hilfe
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


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

BeitragVerfasst am: 07.01.2005, 21:32    Titel: Antworten mit Zitat

Schau Dir sonst den Quelltext von

http://www.dreael.ch/Deutsch/Download/WindowsBitmapBibliothek.html

an. Dort werden ebenfalls 4 bpp-Bilder verarbeitet. Ebenfalls passender Artikel zum Thema:

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

Studiere dort die Hinweise, denn mit einem Hexdumper lernt man am meisten!
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 08.01.2005, 12:49    Titel: Antworten mit Zitat

an deiner lib bin ich schon dran.

aber beim 2.Link funktionieren die Links auf der Seite nicht. böse


edit: Wäre aber trotzdem nett wenn du mir sagen könntest was denn nun ein Offset ist, denn aus diesen Zahlen werde ich nicht schlauer.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 11.01.2005, 23:48    Titel: Antworten mit Zitat

Hallo

In dem Wikipediaartikel ist mit Offset nur die Stelle gemeint, an der die Bildinformation beginnt. Du kannst also ganz normal weiterzählen und musst nur die 54 (bie 24Bit Farbe) bzw. 118 Byte (2-, 4, und 16 Bit) davor dazurechnen Also statt Offset 0, 1, 2, ... usw. einfach mit Position 54, 55, 56, ... bzw. 118, 119, 120, ... weitermachen. Mit dem Offset ist es halt übersichtlicher zu schreiben. Wenn du z.B. eine 100Byte grosse Feldvariable anlegest, ist deren Basisadresse (BA) der Speicherplatz des ersten Bytes. Das hat also den Offset null (BA + 0). das zweite Byte (BA + 1) hat den Offset 1 usw. Du kannst nach dem Header einfach weiter einlesen.

Mit Segment und Offset hat es noch was anderes auf sich. Siehe dazu hier: http://www.tomtomweb.de/technik/speicher/mem_adressierung.htm
Das hat aber mit deinem Problem nicht direkt was zu tun

Eine 1 Byte grosse Variable kannst du (leider nur als String) so anlegen:

DIM variable AS STRING * 1

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 12.01.2005, 19:40    Titel: Antworten mit Zitat

Gut.

Jetzt sind bei 8-Bit die Informationen aber so gespeichert, dass 1 Byte die Informationen für jeweils 2 Pixel speichert.
Ein halbes Byte oder vier bit kann man nicht auslesen oder???

Oder kann ich einfach einen String mit 1 Byte machen, so wie du schon sagst, und nach dem einlesen den nochmal mit mid$ trennen,
aber das geht nicht, da ja nur 1 Zeichen im String gespeichert wurde.
Was mach ich den da nur??


Kann man Zahlen auch "zerteilen"?? So in etwa:


Code:

zahl = 24
text$ = str$(zahl)
zerteilt1$ = mid$(text$,1,1)
zerteilt2$ = mid$(text$,2,1)


Nun müsste doch zerteilt1$ = 2 sein, und zerteilt2$ = 4 sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 12.01.2005, 23:07    Titel: Antworten mit Zitat

Hallo

Beim Programmieren ist es extrem hilfreich, wenn man sich mit dem Binärsystem etwas auskennt. Wenn du ein Byte (zahl) in 2*vier Bit (oben und unten) aufteilen Willst, kannst du das entweder so

oben = fix(zahl/16)
unten = zahl - oben * 16

oder so

oben = zahl AND 15
unten = zahl AND 240

machen.

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 12.01.2005, 23:28    Titel: Antworten mit Zitat

äh, bin mir nicht sicher, aber ist FIX nicht runden? da muss doch INT hin, oder?
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 13.01.2005, 00:10    Titel: Antworten mit Zitat

Hallo

FIX schneidet die Nachkommastellen ab, INT rundet zur nächstkleineren Zahl ab. Bei positiven Zahlen kommt bei beiden das selbe heraus, bei negativen nicht. So gibt FIX (-1.73) -> -1, INT (-1.73) -> dagen -2.

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
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
Seite 1 von 1

 
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