Bilder in Screen12

Die bekannteste Programmiersprache der Welt

Moderatoren: crack, Krüsty, Marwin

Beitragvon 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.
Vylqun
Member
 
Beiträge: 10
Registriert: Samstag 10. Mai 2003, 14:34

Beitragvon 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
Benutzeravatar
Marwin
Moderator
 
Beiträge: 307
Registriert: Donnerstag 8. Mai 2003, 21:19
Wohnort: Seelow, Deutschland

Beitragvon Vylqun » Mittwoch 20. August 2003, 08:11

Danke, werd mal sehen ob es klappt.
Wer viel weiß macht viele Fehler. Ich mache nie Fehler.
Vylqun
Member
 
Beiträge: 10
Registriert: Samstag 10. Mai 2003, 14:34


Zurück zu Q-BASIC


Social Bookmarking
Bookmark bei: Mr. Wong Bookmark bei: Del.icio.us Bookmark bei: Webnews Bookmark bei: Icio Bookmark bei: Oneview Bookmark bei: Linkarena Bookmark bei: Newskick Bookmark bei: Folkd Bookmark bei: Yigg Bookmark bei: Digg Bookmark bei: Reddit Bookmark bei: Simpy Bookmark bei: StumbleUpon Bookmark bei: Slashdot Bookmark bei: Netscape Bookmark bei: Furl Bookmark bei: Yahoo Bookmark bei: Spurl Bookmark bei: Google Bookmark bei: Blinklist Bookmark bei: Blogmarks Bookmark bei: Diigo Bookmark bei: Technorati Bookmark bei: Newsvine Bookmark bei: Blinkbits Bookmark bei: Ma.Gnolia Bookmark bei: Smarking Bookmark bei: Netvouz

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron