Bilder in Screen12

Die bekannteste Programmiersprache der Welt

Moderatoren:crack, Marwin, Krüsty

Antworten
Vylqun
Member
Beiträge:10
Registriert:Samstag 10. Mai 2003, 14:34

Beitrag von Vylqun » Freitag 16. Mai 2003, 11:35

:blink: Wie lese ich BMP-Bilder in QBasic ein (Screen 12)? :unsure:
Wer viel weiß macht viele Fehler. Ich mache nie Fehler.

Benutzeravatar
Marwin
Moderator
Beiträge:307
Registriert:Donnerstag 8. Mai 2003, 21:19
Wohnort:Seelow, Deutschland
Kontaktdaten:

Beitrag von Marwin » Freitag 16. Mai 2003, 14:42

Hier ein Programmteil zum Anzeigen einer bestimmten BMP-Grafik an einer bestimmten Position, wobei die Grafik eine bestimmte Größe haben muss. Weiterhin kann eine transparente Farbe angegeben werden.

Das Hauptprogramm:

Code: Alles auswählen

DECLARE FUNCTION GrafikLaden (Dateiname$, Breite, Hoehe, xLinks, yOben, Transparenz)

SCREEN 12
DIM Karten(5) AS STRING
Karten(1) = "01.bmp"
Karten(2) = "02.bmp"
Karten(3) = "03.bmp"
Karten(4) = "04.bmp"
Karten(5) = "05.bmp"

FOR Grafik = 1 TO 5
    Wert = GrafikLaden(Karten(Grafik), KartenBreite, KartenHoehe, (10 + KartenBreite) * (Grafik - 1), 10, 15)
NEXT
Die Funktion GrafikLaden:

Code: Alles auswählen

FUNCTION GrafikLaden (Dateiname$, Breite, Hoehe, xLinks, yOben, Transparenz)

  Parameter:
  Breite -> wenn das Bild nicht diese Breite besitzt, wird mit einem Fehler beendet
  Hoehe -> wenn das Bild nicht diese Höhe besitzt, wird mit einem Fehler beendet
  xLinks, yOben -> Position der linken oberen Ecke des zu zeichnenden Bildes
  Transparenz -> wenn >= 0 und <=15 dann wird diese Farbe nicht gezeichnet, dass
  heißt der Hintergrund bleibt bei diesen Pixeln erhalten (vorgetäuschte Transparenz)


  nächste freie Dateinummer ermitteln
 Dateinummer = FREEFILE

  der Dateikopf einer Bitmap-Grafik ist 54 Byte lang
 Dateikopf$ = SPACE$(54)

 OPEN Dateiname$ FOR BINARY AS Dateinummer

    wenn die Datei leer ist, dann mit einem Fehler beenden
   IF LOF(Dateinummer) = 0 THEN GOTO Fehler
  
    Dateikopf holen
   GET Dateinummer, 1, Dateikopf$

    die ersten zwei Byte müssen die Zeichen "BM" sein, um zu kennzeichnen,
    dass diese Datei eine BMP-Datei ist
   IF LEFT$(Dateikopf$, 2) <> "BM" THEN GOTO Fehler
          
    weitere Daten überprüfen
   IF CVL(MID$(Dateikopf$, 15, 4)) <> 40 THEN GOTO Fehler
   IF CVI(MID$(Dateikopf$, 27, 2)) <> 1 THEN GOTO Fehler
   IF CVI(MID$(Dateikopf$, 29, 2)) <> 4 THEN GOTO Fehler
   IF CVL(MID$(Dateikopf$, 31, 4)) <> 0 THEN GOTO Fehler

    prüfen, ob die Bildbreite korrekt ist
   BildBreite = CVL(MID$(Dateikopf$, 19, 4))
   BildHoehe = CVL(MID$(Dateikopf$, 23, 4))
   IF BildBreite <> Breite THEN GOTO Fehler
   IF BildHoehe <> Hoehe THEN GOTO Fehler
  
    die Bilddaten auslesen
   SEEK Dateinummer, CVL(MID$(Dateikopf$, 11, 4)) + 1
   Daten$ = SPACE$((((BildBreite - 1) OR 7) + 1) \ 2)
   Laenge = (BildBreite \ 2) - 1
 
   FOR Y = (BildHoehe - 1) TO 0 STEP -1
     GET Dateinummer, , Daten$
     FOR X = 0 TO Laenge
       Byte = ASC(MID$(Daten$, X + 1, 1))
        und auf dem Bildschirm ausgeben
       IF (Byte \ 16) <> Transparenz THEN
          PSET (X * 2 + xLinks, Y + yOben), Byte \ 16
       END IF
       IF (Byte AND 15) <> Transparenz THEN
          PSET (X * 2 + 1 + xLinks, Y + yOben), Byte AND 15
       END IF
     NEXT
   NEXT

 GrafikLaden = TRUE
 GOTO Fertig

Fehler:
 GrafikLaden = FALSE

Fertig:
 CLOSE Dateinummer

END FUNCTION
Wenn die Grafik ohne Beachtung der Abmessungen gezeichnet werden soll, dann nehmt einfach die Parameter Breite und Hoehe heraus, und löscht diese Zeilen:

Code: Alles auswählen

   IF BildBreite <> Breite THEN GOTO Fehler
   IF BildHoehe <> Hoehe THEN GOTO Fehler
^_^ Marwin

Vylqun
Member
Beiträge:10
Registriert:Samstag 10. Mai 2003, 14:34

Beitrag von Vylqun » Mittwoch 20. August 2003, 08:11

Danke, werd mal sehen ob es klappt.
Wer viel weiß macht viele Fehler. Ich mache nie Fehler.

Antworten