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:

BMP Routine (Verständnisprob ;) )

 
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
surfer87



Anmeldungsdatum: 16.09.2004
Beiträge: 103

BeitragVerfasst am: 11.05.2005, 16:08    Titel: BMP Routine (Verständnisprob ;) ) Antworten mit Zitat

Hi ich habe nach einer simplen Routine zum anzeigen von Bmp Bildern gesucht und auch eine gefunden.
Ich würde trotzdem aber gerne wissen wie diese genau funktioniert damit ich ähnliches auch mal selber proggen kann.




'QB BITMAP READER Copyright (c) 1999 XFlareSoft

DEFINT A-Z
DIM byte AS STRING * 1
P$ = "test.bmp"
SCREEN 13: CLS
OPEN P$ FOR BINARY AS #1
GET #1, 1, ftype: GET #1, 29, bits
IF ftype = 19778 AND bits = 8 THEN
FOR attr = 0 TO 255
OUT &H3C8, attr
FOR rgb = 1 TO 3
GET #1, attr * 4 + 58 - rgb, byte
OUT &H3C9, INT(ASC(byte) * .2471)
NEXT
NEXT
GET #1, 19, xsz: GET #1, 23, ysz
FOR ypl& = 1 TO ysz
IF ypl& > 200 THEN EXIT FOR
FOR xpl& = 1 TO xsz
IF xpl& > 320 THEN EXIT FOR
bpl& = LOF(1) - (ypl& * (3 - (xsz + 3) MOD 4)) - ypl& * xsz + xpl&
GET #1, bpl&, attr
PSET (xpl& - 1, ypl& - 1), attr
NEXT
NEXT
ELSEIF ftype = 19778 THEN
PRINT "You are trying to load a Bit-Map image"
PRINT "which has been saved in"; bits; "bit format."
PRINT "For coding efficiency, this program"
PRINT "only reads 8 bit files. Please save the"
PRINT "image as a 256 color BMP and try again."
ELSEIF LOF(1) = 0 THEN
PRINT "You have specified an invalid file name"
PRINT "to be opened. Please verify that your"
PRINT "P$ variable setting is correct.": del = 1
ELSE
PRINT "You are trying to load a non Bit-Map"
PRINT "file. Check to see if your file name is"
PRINT "correct. "
END IF
CLOSE #1
IF del THEN KILL P$
DO: LOOP WHILE INKEY$ = "": SYSTEM
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 11.05.2005, 18:43    Titel: Antworten mit Zitat

Schau dich mal hier um.


http://de.wikipedia.org/wiki/BMP

Da steht genau die Struktur bzw. der Aufbau von .bmp Dateien beschrieben. Kannst dann einfach selber eine programmieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
surfer87



Anmeldungsdatum: 16.09.2004
Beiträge: 103

BeitragVerfasst am: 11.05.2005, 19:16    Titel: Antworten mit Zitat

Naja ein Profi bin ich nicht und ich habe mit solchen Routinen noch nicht viel gearbeitet.
Vllt reichen erstmal Kommentare zu dem Quellcode zwinkern ist ja nicht zu lang und die meisten kennen sich da gut mit aus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 11.05.2005, 22:20    Titel: Antworten mit Zitat

Siehe Grundlagen-Artikel

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

Das A und O ist das Auftreiben der Originalspezifikationen zu einem Dateiformat und dieses dann entsprechend umsetzen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

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

Da sieht man mal wieder warum man Kommentare in die Programme schreiben sollte.
Code:
DEFINT A-Z
DIM byte AS STRING * 1
DIM xsz AS LONG 'x-Size
DIM ysz AS LONG 'y-Size
P$ = "test.bmp"
SCREEN 13

'--- Datei öffnen ---
OPEN P$ FOR BINARY AS #1

'--- Dateiheader auslesen ---
'Die ersten 54 Byte der Datei sind fest vorgegeben und werden Dateiheader genannt
'Position =  1 -> Am Anfang einer BMP-Datei muß die Zahl 19778 stehn
'         = 29 -> In diesem Beispiel muß hier eine 8 stehn, da dieses Programm nur bei 8-Bit-BMP-Datein funktioniert
'         = 19 -> Bildbreite in Pixel
'         = 23 -> Bildhöhe in Pixel
GET #1, 1, ftype
GET #1, 29, bits
GET #1, 19, xsz
GET #1, 23, ysz

'--- 8-Bit-BMP-Datei erkannt ---
IF ftype = 19778 AND bits = 8 THEN
   '--- Farbpallette auslesen und setzen ---
   FOR attr = 0 TO 255
      OUT &H3C8, attr
      FOR rgb = 1 TO 3
         GET #1, attr * 4 + 58 - rgb, byte
         OUT &H3C9, INT(ASC(byte) * .2471)
      NEXT
   NEXT

   '--- Bild zeichnen ---
   FOR ypl& = 1 TO ysz
      IF ypl& > 200 THEN EXIT FOR
      FOR xpl& = 1 TO xsz
         IF xpl& > 320 THEN EXIT FOR
         bpl& = LOF(1) - (ypl& * (3 - (xsz + 3) MOD 4)) - ypl& * xsz + xpl&
         GET #1, bpl&, attr
         PSET (xpl& - 1, ypl& - 1), attr
      NEXT
   NEXT

'--- Fehlermeldung: Keine 8-Bit-BMP-Datei ---
ELSEIF ftype = 19778 THEN
   PRINT "You are trying to load a Bit-Map image"
   PRINT "which has been saved in"; bits; "bit format."
   PRINT "For coding efficiency, this program"
   PRINT "only reads 8 bit files. Please save the"
   PRINT "image as a 256 color BMP and try again."

'--- Fehlermeldung: Datei nicht vorhanden ---
ELSEIF LOF(1) = 0 THEN
   PRINT "You have specified an invalid file name"
   PRINT "to be opened. Please verify that your"
   PRINT "P$ variable setting is correct."
   del = 1 'Datei löschen

'--- Fehlermeldung: Datei ist keine BMP-Datei ---
ELSE
   PRINT "You are trying to load a non Bit-Map"
   PRINT "file. Check to see if your file name is"
   PRINT "correct. "
END IF

'--- Datei schließen ---
CLOSE #1
IF del THEN KILL P$
DO: LOOP WHILE INKEY$ = "": SYSTEM
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
triturus



Anmeldungsdatum: 11.03.2005
Beiträge: 32

BeitragVerfasst am: 12.05.2005, 01:01    Titel: Antworten mit Zitat

Hi,
Das Programm funktioniert ja sehr gut. Nur wäre es schön, wenn man auch 24bit-Bilder mit viel besserer Qualität damit ausgeben könnte.

Könnte einer von euch Künstlern sich aus purer Langeweile damit vergnügen, den Quellcode dahin abzuändern? Bei mir funzt das so gar nicht. Dafür weiss ich jetzt, wie Picasso zu seinen Bildern gekommen ist.

mfg
Triti
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 12.05.2005, 13:39    Titel: Antworten mit Zitat

24 Bit geht in QB nicht, dazu musst du FreeBASIC oder eine Grafik-Library wie zum Beispiel die AK-Lib benutzen.

In purem QBasic ohne Lib erreichst du mit Screen 12 die höchste Auflösung (640x480, 16c) und in Screen 13 die höchste Farbanzahl (256c, 320x200)

Ansonsten: Einfach die BMP in eine 8-Bit-Bitmap konvertieren - spart eh Speicher..
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
dreael
Administrator


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

BeitragVerfasst am: 12.05.2005, 20:10    Titel: Antworten mit Zitat

Eine interessante und reizvolle Aufgabe in QB ist ansonsten die Programmierung einer Dithering-Darstellroutine für TrueColor-.BMP-Dateien auf einem regulären SCREEN-Grafikmodus.

Die C++-Version von

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

beinhaltet eine solche Routine - ist nicht allzu schwierig, diese auch in QB zu portieren. Tipp: Bei der Farbpalette 216 der 256 Farben auf die Netscape-Farbpalette bei SCREEN 13 setzen und entsprechend mit
Code:
PSET (x%, y%), basis% + (r% \ 51) + 6 * (g% \ 51%) + 36 * (b% \51)

berechnen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
triturus



Anmeldungsdatum: 11.03.2005
Beiträge: 32

BeitragVerfasst am: 12.05.2005, 23:52    Titel: Antworten mit Zitat

Danke fürs Beauskunften.
Soso, 24 Bit geht nicht. Übel. Na ja, werde mal Dreaels Link folgen.
Habe hier nämlich ein Bild von einem Eichhörnchen, das unter 24 Bit gar prächtig aussieht, bei 8 Bit aber so, als wäre es bereits von einem Marder verdaut worden. Das Tierchen muß aber in freundlicher Gestalt auf den Bildschirm, sonst höhnt die ganze Schule.

Triti
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 13.05.2005, 20:27    Titel: Antworten mit Zitat

Wie in meinen verschiedenen Artikeln beschrieben, lasse ich in der Regel Corel PhotoPAINT ans Werk, um ein Bild so richtig für die regulären SCREEN-Bildschirmmodi optimieren zu können. Übrigens eignet sich ein Programm, bei dem man eine Bitmap auch auf eine selber definierte Farbpalette runterrechnen kann, am besten. Genau dies machte ich seinerzeit bei

http://beilagen.dreael.ch/QB/GELDUHR.ZIP

deswegen kommen auch die Banknoten farblich im ganz normalen SCREEN 12-Modus auch so gut heraus.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 14.05.2005, 00:46    Titel: Antworten mit Zitat

Mecki hat Folgendes geschrieben:
24 Bit geht in QB nicht, dazu musst du FreeBASIC oder eine Grafik-Library wie zum Beispiel die AK-Lib benutzen.

In purem QBasic ohne Lib erreichst du mit Screen 12 die höchste Auflösung (640x480, 16c) und in Screen 13 die höchste Farbanzahl (256c, 320x200)

Ansonsten: Einfach die BMP in eine 8-Bit-Bitmap konvertieren - spart eh Speicher..


HI.
Ich hab mir vor längerem die library gezogen, doch diese klappt leider bei mir nicht. Ich hab die datei eingebunden (C:\qbasic\qb.exe /ak14b.qlb oder so ähnlich. Kann jetzt nicht nachgucken, habs aber richtig) doch wenn ich eine sub aufrufe (z.B.Auflösung auf 1024*768 setzen xscrenn &H irgendwas durchgeknallt ) dann geht der Bildschirm aus. Nur die modi von qbasic werden unterstützt. Monitor kann aber auch viel höhere auflösungen anzeigen. Unter windows hab ich den auf 1024*768 stehen. Bildwiederholfrequenz auf 85. Muss ich da was ändern oder wieso klappt das nicht???

PLEASE HELP

mfg
Michael
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Kai Bareis



Anmeldungsdatum: 10.09.2004
Beiträge: 545
Wohnort: Baden Würtemberg

BeitragVerfasst am: 14.05.2005, 00:57    Titel: Antworten mit Zitat

Hallo
also wen du die AKlib 14b hast dann kann es sein das du blos bis 256 Farben gehen kannst. Und nach Xscreen dauert es immer etwas bis die Initialisirung oder was auch immer fertig ist. Wen ich mich nicht irre kannst du von AKs Seite http://www.iconsoft.de die Version AK 15 runterladen
_________________
MfG Kai Bareis
Es ist noch kein Meister vom Himmel gefallen! Warum einfach wens auch umständlich geht!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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