Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jan

Anmeldungsdatum: 04.01.2005 Beiträge: 74
|
Verfasst am: 04.01.2005, 16:42 Titel: Get für Dateien verwenden |
|
|
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 |
|
 |
Devilkevin aka Kerstin

Anmeldungsdatum: 11.11.2004 Beiträge: 2532 Wohnort: nähe Mannheim
|
Verfasst am: 04.01.2005, 16:55 Titel: |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 04.01.2005, 16:57 Titel: |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 04.01.2005, 17:17 Titel: GET |
|
|
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... )
Jetzt sag erst mal, was du vorhast und dann können wir dir genauere Codebeispiele liefern.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
ZaPPa
Anmeldungsdatum: 29.09.2004 Beiträge: 98 Wohnort: Wuppertal
|
Verfasst am: 04.01.2005, 17:17 Titel: |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 04.01.2005, 17:22 Titel: |
|
|
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]
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
ZaPPa
Anmeldungsdatum: 29.09.2004 Beiträge: 98 Wohnort: Wuppertal
|
Verfasst am: 04.01.2005, 17:28 Titel: |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
ZaPPa
Anmeldungsdatum: 29.09.2004 Beiträge: 98 Wohnort: Wuppertal
|
Verfasst am: 04.01.2005, 17:35 Titel: |
|
|
habsch auch net so aufgefasst  _________________ --- 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 |
|
 |
Jan

Anmeldungsdatum: 04.01.2005 Beiträge: 74
|
Verfasst am: 04.01.2005, 17:48 Titel: |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 04.01.2005, 17:53 Titel: Verschiedene fertige Loader |
|
|
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.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Jan

Anmeldungsdatum: 04.01.2005 Beiträge: 74
|
Verfasst am: 04.01.2005, 17:53 Titel: |
|
|
ok, danke |
|
Nach oben |
|
 |
Jan

Anmeldungsdatum: 04.01.2005 Beiträge: 74
|
Verfasst am: 07.01.2005, 16:57 Titel: |
|
|
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
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 |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
Jan

Anmeldungsdatum: 04.01.2005 Beiträge: 74
|
Verfasst am: 08.01.2005, 12:49 Titel: |
|
|
an deiner lib bin ich schon dran.
aber beim 2.Link funktionieren die Links auf der Seite nicht.
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 |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 11.01.2005, 23:48 Titel: |
|
|
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 |
|
 |
Jan

Anmeldungsdatum: 04.01.2005 Beiträge: 74
|
Verfasst am: 12.01.2005, 19:40 Titel: |
|
|
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 |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 12.01.2005, 23:07 Titel: |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 12.01.2005, 23:28 Titel: |
|
|
ä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 |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 13.01.2005, 00:10 Titel: |
|
|
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 |
|
 |
|