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:

Bild dirket in programm einbetten
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 31.03.2007, 14:12    Titel: Bild dirket in programm einbetten Antworten mit Zitat

hi leute,
ich habe folgendes vor:
eine 320x240 pixel große bitmap(32 bit) soll direkt in das programm rein, also ohne irgendwelche externen dateien. dafür hab' ich mir folgendes geschrieben, aber 1) sind das dann 2.5 MB source und 2) dauert das ne ewigkeit

Code:


open "load.bas" for output as #2

dim bild as integer
dim as integer x, y

screen 14,32,2,&H00

bload "splash.bmp"

print #2,"Dim as integer x, y"
print #2,"for x = 1 to 320"
print #2,"    for y = 1 to 240"

for x = 1 to 320
    for y = 1 to 240
        bild = point(x,y)
        print #2, "         pset(x,y),"; bild
    next y
next x

print #2,"  next y"
print #2,"next x"

close #2
end


weiß jemand wie man das besser macht?
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 31.03.2007, 14:18    Titel: Antworten mit Zitat

Du könntest
1) mit ressourcen arbeiten. nachteil: is kompliziert und geht nur unter windows
2) du könntest dir nen "overloader" schreiben, der die datei ans ende der Ende packt. dadurchp assiert der exe nichts. ich hab schon einige geschrieben... lächeln prinzip geht so: direkt ans ende der exe kommen die daten. vorher musst du dir die position ( = dateilänge zu beginn) merken. diese position schreibst du dann hinter die daten. wenn du dann das teil wieder lesen willst, musste also ans ende der datei gehn, da die zahl auslesen (es empfiehlt sich hier, im BINARY-Modus zu arbeiten, da hier die zahlen ja binär gespeichert werden), dort hinspringen und einen puffer auslesen, der allersdings die letzen 4 bytes (bei integers) nicht mitliest zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 31.03.2007, 14:20    Titel: Antworten mit Zitat

hmmm, nur unter windows ist kein prob, ...

overloader? da gabs doch mal son highscore-prog....

geht sowas nich auch mit data-zeilen? wöre das net einfacher??
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 31.03.2007, 14:22    Titel: Antworten mit Zitat

es wäre
1) nciht einfacher
2) es würde uU seeehr lange dauern, die daten erstmal zu erstellen und
3) unverhältnisäßig lange dauern, die ganzen DATA-Zeilen auszulesen.
4) DATA ist für große daten immer ungeeignet.
5) große daten sollte man immer auslagern in externe dateien, und das ist es ja im prinzip, was der overloader da macht.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 31.03.2007, 14:31    Titel: Antworten mit Zitat

Du könntest die Datei auch direkt einbinden:
http://www.freebasic.net/forum/viewtopic.php?t=7869
An der Übersetzung der Beschreibung arbeite ich gerade, steht bald hier oder auf ytwinky, ähm, eher auf ytwinky grinsen
[Edit]
Eine Vorab-Version der Beschreibung ist nun vorhanden:
File2Obj.Htm
(kann natürlich auch über die Tuts-Seite aufgerufen werden..)
..wie gesagt, eine Vorab-Version, deren Inhalt sich nicht mehr ändern wird, aber die Gestaltung vllt noch..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 31.03.2007, 16:13    Titel: Antworten mit Zitat

Okay, danke! ich werde dann mal File2Obj ausprobieren...
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 31.03.2007, 17:03    Titel: Antworten mit Zitat

das prog an sich macht die arbeit gut, und nochmals danke an die schnelle übersetztung von ytwinky. Aber ich habe da doch nochma so eine skriptkiddie frage:

ich habe das jetzt so:
Code:

extern splash as string

screen 14,32,2,&H00

Put(0,0),@splash

sleep

jetzt müsste er doch eigentlich das unter _SPLASH gespeicherte bild anzeigen. das tut er aber net. unter _SPLASH ist ein bitmap mit den maßen 320x240 und einer farbtiefe von 32 bpp gespeichert. was mach ich hier falsch?
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 31.03.2007, 18:02    Titel: Antworten mit Zitat

Manchmal ergibt sich Arbeitsteilung im Laufe der Arbeit grinsen
Ich mach die Übersetzung und du probierst es aus zwinkern
file2obj_d.html hat Folgendes geschrieben:
Im Beispiel werden die EXTERNs als UBYTE gedim'd. Sie können natürlich auch als beliebiger ’user defined type’(UDT) definiert sein, der dafür zweckmäßig ist, z.B., Bitmap File Header.
..auf den ersten Blick fällt mir nur auf, daß du wohl doch keinen so 'zweckmäßigen' Typ für deine EXTERNs verwendest, mußte mal kucken..
apropos kucken: Wenn du dir die File2Obj_d.Htm gedownloadet hast, zieh sie dir besser nochmal, dann haste ne Version, in der nicht mehr 'VorabVersion' steht grinsen
..sprich: Ich habe die Datei unformatiert, sieht so besser aus..
Schönen Dank jedenfalls für deine Mitarbeit
[Edit]
csderats hat Folgendes geschrieben:
unter _SPLASH ist ein bitmap mit den maßen 320x240 und einer farbtiefe von 32 bpp gespeichert.
..soso, du weißt also, über das Bild Bescheid, ich jetzt auch..
(ahnst du, was kommt?)
File2Obj 'weiß' aber nur, daß _SPLASH ein String ist und gibt diesen aus(wahrscheinlich bis Chr(0), weil dann is Ende)
(Du könntest das ja mit PrintObj mal probieren..)
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 31.03.2007, 18:25    Titel: Antworten mit Zitat

habs mal schnell ausgeführt:
Code:

*** FILE HEADER ***
Magic                                  332
No. of sections                          1
Time Stamp                               0
Symbol Table Offset               00038474
No. of symbols                           1
Extra header size                        0
Flags                             0105
String Table Offset               00038486
*** SECTION HEADER  1 ***
Section Name                      .data1
Physical Address                  00000000
Virtual Address                   00000000
Section Size                        230456
Section Start                     0000003C
Relocn Start                      00000000
Line Nos. Start                   00000000
No. Relocn Entries                       0
No. Line Nos.                            0
Flags                             00000040
*** SYMBOL TABLE ***
No.ValueSectionTypeClassNo. Aux.Symbol
 10 1000020_SPLASH
Completed


die größe stimmt ... war im beispiel nicht zstring verwendet worden? zstring ist doch nullterminiert
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 31.03.2007, 21:17    Titel: Antworten mit Zitat

ja stimmt. nach dem 6 byte inner .bmp-file kommt chr(0). hmmm, alles mit get, point, bsave macht mir was mit chr(0). verdammt!? weiß jemand wie ich es hinkriege, dass da kein chr(0) mehr vorkommt?

/edit:
koennte man die datei nicht verschlüsseln, sodass kein chr(0) mehr vorkommt?
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 31.03.2007, 21:19    Titel: Antworten mit Zitat

Hi,
ich habe eine anderen Lösung gewählt. Eigentlich war das für Fontimages gedacht, läst sich aber auch auf bmp und wav leicht übertragen.
OK grinsen , gibt eine riesen inc-Datei aber es funktioniert.
Dieses Programm ist nur zum erstellen der include-Datei, danach braucht man es nicht mehr.
Code:
'um diese Funktionen der gfxlib nutzen zu können muss eine Anweisung, wie unten SCREEN, aus
'der gfxlib im Programm benutzt werden. Damit wird die gfxlib in unser Programm gelinkt.
Declare Function Encode Alias "fb_hEncode" (ByVal lpIn  As Any Ptr, ByVal asize As Integer,_
                              ByVal lpOut As Any Ptr, ByRef out_size AS Integer ) As Integer

Dim As Integer breit, hoch, i, ff,l
Dim As Uinteger j, k, anzahlbyt
Dim As String fName, d
Dim As Integer Ptr img

Screen 18,32
breit = 256        'Bildbreite
hoch = 192         'Bildhöhe
img = ImageCreate (breit, hoch,0) 'Image erstellen
BLoad "poke.bmp",img              'Bild laden
Put (0, 50), img, PSet            'Image anzeigen

anzahlbyt = (breit * hoch *4) +32 'Anzahl Byte
Dim Buffer (anzahlbyt\4) As Uinteger'in diesen Buffer wird das Image komprimiert
j = anzahlbyt
?j
'Encode bekommt die Adresse des Image, Anzahl Byte des Image,
'               die Adresse des Buffers,Anzahl Byte des Buffers
Encode (img, anzahlbyt, @Buffer(0), j)
'nach dem Aufruf enthält j die neue Anzahl Byte
j=iif(j mod 4,j\4 +1,j\4)'hier als Anzahl UInteger

ImageDestroy img 'das brauchen wir nicht mehr

fName = "poke1"
'Buffer als Array in Include-Datei speichern:
ff = Freefile
Open fName + "_.inc" For Output As #ff
Print #ff, "Dim As UInteger " + fName + "(0 To " + Str(j-1) + ") = {";
l = 40
For i = 0 To j-2
  k = Buffer(i)
  d = Str(k)
  l = l +Len(d) +1
  If l > 210 Then
    Print #ff, d + ",_"
    l = 0
  Else
    Print #ff, d + ",";
  End If
Next
k = Buffer(j-1)
Print #ff, Str(k) + "}"
Print #ff, "Dim as Integer " + fName + "_byte = " + str(anzahlbyt)
l = Lof(ff)
Close #ff

?"verdisch...", l ; " Byte (" ; Left(Str(l/anzahlbyt*100),5);"%)"
Sleep
End

Mit diesem Programmteil läst sich das Bild darstellen:
Code:
Declare Function Decode Alias "fb_hDecode" (ByVal lpIn  As Any Ptr, ByVal asize As Integer,_
                              ByVal lpOut As Any Ptr, ByRef out_size AS Integer ) As Integer
#include "poke1_.inc"

Screen 18,32
'Image entpacken, in ein Bytearray einlesen
Redim Buffer2 (poke1_byte) As Ubyte 'einfaches Array für das Image
Decode (@poke1(0), ubound(poke1)*4, @Buffer2(0), poke1_byte) 'entpacken

Put (10, 30), @Buffer2(0), PSet       'anzeigen
Sleep
End

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.


Zuletzt bearbeitet von volta am 31.03.2007, 21:31, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 31.03.2007, 21:29    Titel: Antworten mit Zitat

Hey, danke volta! und das ganze ist sogar ohne weiteres auf linux und (eingeschränkt, wegen Grafikfunktionen) auch auf DOS lauffähig, und dann auch auf X-BOX.

Die .inc-Datei ist nich so riesig, wie vorher mit objectfile und so... 225 KB

echt duper, jetzt kann ich mich wieder mit den rest des progs beschäftigen...
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 31.03.2007, 21:36    Titel: Antworten mit Zitat

Das sieht aber verdammt nach Aufkündigung der Arbeitsgemeinschaft aus lachen
Herzlichen Dank dafür, volta grinsen vor lachen auf dem Boden rollen
Gruß
ytwinky
(der jetzt doch selber ein Beispiel finden muß traurig)
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 31.03.2007, 21:45    Titel: Antworten mit Zitat

du könntest das an einen bild demonstrieren, welches keine &HFF00FF oder schwarzen stellen hat, oder wenn du vorher den header entfernst...

/edit:
so kannst du auch zufalls-Strings mit beliebiger länge erstellen:
Code:

dim s as uinteger
dim bla as string

randomize timer

    for s = 1 to 512
        bla += chr(INT(RND * 255) + 1)
    next s

_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 31.03.2007, 22:31    Titel: Antworten mit Zitat

ytwinky hat Folgendes geschrieben:
Das sieht aber verdammt nach Aufkündigung der Arbeitsgemeinschaft aus lachen
Herzlichen Dank dafür, volta grinsen

immer ich ... Gnade, Gnade!
immer auf die Kleinen.. weinen

Ich glaube nicht das File2Obj so einfach funktioniert wie csderats das ausprobiert hat. Der Fehler liegt auch nicht an chr(0).
Wenn du ein Image erstellst, dies als Binäre-datei speicherst, dann obj-File daraus machen, deine Datei mit dem obj-File linken, ja dann..
..dann geht evtl.
Code:
Put(0,0),@_SPLASH
??
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 31.03.2007, 23:05    Titel: Antworten mit Zitat

Wichtig war erstmal, daß die Übersetzung einigermaßen okay ist und nicht völlig unansehnlich, da war es natürlich prima, daß csderats das gleichmal ausprobieren konnte. Daß er bei seinem Bild evtl. einen falschen Datentyp benutzt haben könnte, deutete ich oben bereits an zwinkern
Das Beispiel von jevans4949 habe ich jetzt durchprobiert und 'et läuft'..
und zwar sowohl mit der aktuellen FB0.17b als auch mit der stable FB0.16bSE grinsen
Denn das wußte ich bis eben ja auch noch nicht..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 05.04.2007, 15:03    Titel: Antworten mit Zitat

Hi,
es scheint so, daß 'wir' einen Fall aufgedeckt haben, den File2Obj() wirklich nicht handeln kann.
Jedenfalls arbeitet jevans4949 an einer Lösung..
Joshy(!!, siehe Link weiter oben..) hatte auch einen Tipp dazu, den ich aber nicht ausprobieren kann,
da er GOTO verwendet (lachen)
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 05.04.2007, 18:34    Titel: Antworten mit Zitat

..er ist wieder da, wieder online .. grinsen

ist ja ein genialer Vorschlag, aber,
Code:
Dim As Byte Ptr lpData
Goto binary_end ' dont execute your binary datas jump over it
binary_start:
asm .incbin "poke1_.bin"   '..\decode_bild_.asm:32: Error: missing string
binary_end:
asm mov eax,[binary_start]
asm mov [lpData], eax
'lpData = @binary_start 'geht nicht

wie bekommt man den fbc dazu
Code:
asm .incbin "poke1_.bin"
das durchgehen zu lassen, und nicht
Code:
asm .incbin poke1_.bin    ->    Error: missing string
daraus zu machen??
Habe schon alles versucht... mit dem Kopf durch die Mauer wollen weinen Kopf schütteln
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 05.04.2007, 18:48    Titel: Antworten mit Zitat

Ich habe gewußt, daß GOTO nicht die Lösung sein kann vor lachen auf dem Boden rollen
Hmm, auf die Schnelle fällt mir nur ein, daß ich ja in Asm-pur Datenbereich deklarieren kann, aber dieser 'dumme' Compiler
glaubt ja offensichtlich, daß jede Programmzeile auch durch ihn ausführbar sein muß..
..was auf der anderen Seite natürlich auch immense Vorteile hat lachen
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 05.04.2007, 18:53    Titel: Antworten mit Zitat

Autsch!
Code:
asm .incbin """poke1_.bin"""


Yahooo!!!!

Edit/ zu früh gefreut missbilligen
die Adresse des Labels ist nicht die Adresse der Daten ...
durchgeknallt das krieg ich noch raus mit dem Kopf durch die Mauer wollen
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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 FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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