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:

Angeblich EOF erreicht!

 
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
Grey Fox



Anmeldungsdatum: 16.02.2005
Beiträge: 13

BeitragVerfasst am: 24.03.2005, 16:11    Titel: Angeblich EOF erreicht! Antworten mit Zitat

So ich wollte mal meinen eigenen BMP-Loader Basteln!
Gut Palette und Header ist ja alles klar!
Aber wenn ich die Bitmap in Variablen Packen will, dann meint er bei genau Teil4.Pixel.Speicher(6440) an
das er das Ende der Datei erreicht habe, aber es fehlen noch ca. 80% der Datei.
Beim Programmstop befindet sich der Dateizeiger auf 6558 Byte aber dann macht er ebend leider nix mehr!

Hab mal den Quellcode Gepostet
Ich versuche erstmal die Grundstruktur reinzubringen also nicht wegen der Form oder diverse GOTO's etc. irgendetwas sagen grinsen

Code:

DECLARE SUB Built.BMP ()
DECLARE SUB Scan.Palette ()
DECLARE SUB Scan.Header ()
SCREEN 13
OPEN "C:\QBasic\Qb_4_5_D\Test.bmp" FOR INPUT AS #1
CALL Scan.Header
CALL Scan.Palette
CALL Built.BMP

SUB Built.BMP

DIM Teil4.Pixel.Speicher(1 TO 8806) AS INTEGER
DIM Teil3.Pixel.Speicher(1 TO 8806) AS INTEGER
DIM Teil2.Pixel.Speicher(1 TO 8806) AS INTEGER
DIM Teil1.Pixel.Speicher(1 TO 8806) AS INTEGER

FOR i% = 1 TO 8806
IF EOF(1) THEN GOTO Fehler                                 ----> Hier kommt der
Teil4.Pixel.Speicher(i%) = ASC(INPUT$(1, #1))      ----> Fehler
NEXT i%
FOR i% = 1 TO 8806
Teil3.Pixel.Speicher(i%) = ASC(INPUT$(1, #1))
NEXT i%
FOR i% = 1 TO 8806
Teil2.Pixel.Speicher(i%) = ASC(INPUT$(1, #1))
NEXT i%
FOR i% = 1 TO 8806
Teil1.Pixel.Speicher(i%) = ASC(INPUT$(1, #1))
NEXT i%

Fehler:
COLOR 10
PRINT "Fehler!!!"

END SUB

SUB Scan.Header

DIM Scaned.Header(1 TO 54) AS STRING * 1

CLS
FOR i% = 1 TO 54
        Scaned.Header(i%) = INPUT$(1, #1)
NEXT i%

IF Scaned.Header(1) + Scaned.Header(2) <> "BM" THEN
        CLS
        PRINT ""
        PRINT "Die Datei ist entweder keine Gueltige Bitmap"
        PRINT "oder sie ist Beschaedigt!"
        SLEEP
        END
ELSE PRINT "Datei ist eine gueltige Bitmap"
END IF
ERASE Scaned.Header
END SUB


SUB Scan.Palette

DIM Scaned.Palette(0 TO 15) AS STRING * 4
DIM Fertig.Palette(0 TO 15) AS LONG

FOR i% = 0 TO 15
Scaned.Palette(i%) = INPUT$(4, #1)
Ergebnis1& = INT(ASC(MID$(Scaned.Palette(i%), 3, 1)) / 4)
Ergebnis2& = 256 * (INT(ASC(MID$(Scaned.Palette(i%), 2, 1)) / 4))
Ergebnis3& = 65536 * (INT(ASC(MID$(Scaned.Palette(i%), 1, 1)) / 4))
Fertig.Palette(i%) = Ergebnis1& + Ergebnis2& + Ergebnis3& - 65793
IF Fertig.Palette(i%) >= Hintergrund.Farbe& THEN
        Hintergrund.Farbe& = Fertig.Palette(i%)
        Schalter% = 1
        PALETTE 0, Hintergrund.Farbe&

ELSE
END IF
PRINT Fertig.Palette(i%)
COLOR i%
PRINT "Test"
PALETTE i% + 1 - Schalter%, Fertig.Palette(i%)
IF Schalter% = 1 THEN Schalter% = 0
NEXT i%
SLEEP
END SUB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Quark48



Anmeldungsdatum: 16.10.2004
Beiträge: 559
Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern

BeitragVerfasst am: 24.03.2005, 16:17    Titel: Antworten mit Zitat

Hallo!

Wie groß ist deine Bitmap-Datei?
6558 Bytes im Nirgendwo zwinkern
_________________
Grüßle, Stefan lächeln
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht! happy
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Grey Fox



Anmeldungsdatum: 16.02.2005
Beiträge: 13

BeitragVerfasst am: 24.03.2005, 16:25    Titel: Antworten mit Zitat

Ca. 34 KByte mit den Augen rollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Stephan



Anmeldungsdatum: 05.10.2004
Beiträge: 358
Wohnort: Hessen - 20km Nördlich von Frankfurt am Main

BeitragVerfasst am: 24.03.2005, 20:28    Titel: Antworten mit Zitat

Du solltest das File wohl eher im Binary Modus öffnen,
und mit GET Arbeiten.
Da der INPUT befehl an einem EOF Stoppt.
_________________
'Wir schätzen die Zeit erst, wenn uns nicht mehr viel davon geblieben ist.'
Leo Tolstoi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 24.03.2005, 23:15    Titel: Antworten mit Zitat

Mein berühmter Link

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

soll an dieser Stelle nicht fehlen. Ansonsten empfehle ich Dir, generell wie unter

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

beschrieben vorzugehen. Microsoft hat übrigens die Spezifikationen zum .BMP-Dateiformat veröffentlicht:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_2w1f.asp

Hierbei die Strukturen BITMAPFILEHEADER (kommt ganz am Anfang der Bilddatei), BITMAPINFOHEADER und RGBQUAD (Farbpaletteneintrag) genau beachten.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
code



Anmeldungsdatum: 19.01.2005
Beiträge: 154

BeitragVerfasst am: 25.03.2005, 19:03    Titel: Antworten mit Zitat

das Problem hatte ich auch schon.

Code:
Do
a=input$(#1,1)
loop until eof

EOF prüft einfach nur ob in der datei das ASCI Zeichen 26
steht, dieses steht nämlich für END OF FILE.

Um dieses Problem zu beheben die Datei einfach im binärmodus aufmachen, und anstatt
Code:
loop until eof

zunehmen, einfach
Code:
loop until i=lof(nummer)

wobei nummer die nummer der geöffneten datei ist, und i eine zählervariable.

(Das ist übrigens auch ein netter Trick um Daten über das Dateiende hinauszuschreiben. Einfach Print chr$(26) benutzen und danach die daten die du in die Datei versteckt schreiben möchtest. (geht natürlich nicht wenn du denn code von oben nimmst, sondern nur wenn du mit eof auf das dateiende prüfst.))
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Grey Fox



Anmeldungsdatum: 16.02.2005
Beiträge: 13

BeitragVerfasst am: 30.03.2005, 13:43    Titel: Antworten mit Zitat

OK!

Mit BINARY Geht es happy


So noch eine Frage:
Ist es Effektiver die Ganze Datei einmal Komplett in mehrere Variablen zu Packen, oder Byte für Byte (Also Praktisch Information einlesen, darstellen, und Repeat) auszulesen und darzustellen???

THX an euch lachen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 30.03.2005, 13:46    Titel: Antworten mit Zitat

Hallo.

In QB ist dein Zeichenketten- und Arrayspeicher begrenzt. Bei größeren Dateien kannst du nicht alles auf einmal lesen. lächeln Stück für Stück ist am besten. lächeln (evtl. mit Puffer)

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
DarkLord



Anmeldungsdatum: 26.03.2005
Beiträge: 70
Wohnort: Rhade^^ oben bei muddi

BeitragVerfasst am: 30.03.2005, 14:57    Titel: Antworten mit Zitat

Falls es leute gibt die ein prob mit dem angeblichen EOF ende habe (wenn z.B. die Datei ausgelesen wird), obwohl die datei 4 beschriebene Zeilen hat... fügt einfach am Ende eine weitere leere Zeile hinzu, bei mir klappt das immer happy
Habe am ende jetzt immer 2 leere zeilen und gott-sei-dank keine eof fehler mehr^^
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
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