|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 31.03.2007, 15:12 Titel: Bild dirket in programm einbetten |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 31.03.2007, 15:18 Titel: |
|
|
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... 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 _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 31.03.2007, 15:20 Titel: |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 31.03.2007, 15:22 Titel: |
|
|
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 |
|
|
ytwinky
Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 31.03.2007, 15:31 Titel: |
|
|
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
[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 |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 31.03.2007, 18:03 Titel: |
|
|
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 |
|
|
ytwinky
Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 31.03.2007, 19:02 Titel: |
|
|
Manchmal ergibt sich Arbeitsteilung im Laufe der Arbeit
Ich mach die Übersetzung und du probierst es aus
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
..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 |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 31.03.2007, 19:25 Titel: |
|
|
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 |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 31.03.2007, 22:17 Titel: |
|
|
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 31.03.2007, 22:19 Titel: |
|
|
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 , 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, 22:31, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 31.03.2007, 22:29 Titel: |
|
|
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 |
|
|
ytwinky
Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 31.03.2007, 22:36 Titel: |
|
|
Das sieht aber verdammt nach Aufkündigung der Arbeitsgemeinschaft aus
Herzlichen Dank dafür, volta
Gruß
ytwinky
(der jetzt doch selber ein Beispiel finden muß ) _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 31.03.2007, 22:45 Titel: |
|
|
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 31.03.2007, 23:31 Titel: |
|
|
ytwinky hat Folgendes geschrieben: | Das sieht aber verdammt nach Aufkündigung der Arbeitsgemeinschaft aus
Herzlichen Dank dafür, volta |
immer ich ...
immer auf die Kleinen..
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.
?? _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
ytwinky
Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 01.04.2007, 00:05 Titel: |
|
|
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
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
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 |
|
|
ytwinky
Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 05.04.2007, 16:03 Titel: |
|
|
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 ()
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 05.04.2007, 19:34 Titel: |
|
|
..er ist wieder da, wieder online ..
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... _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
ytwinky
Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 05.04.2007, 19:48 Titel: |
|
|
Ich habe gewußt, daß GOTO nicht die Lösung sein kann
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
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 05.04.2007, 19:53 Titel: |
|
|
Code: | asm .incbin """poke1_.bin""" |
Edit/ zu früh gefreut
die Adresse des Labels ist nicht die Adresse der Daten ...
das krieg ich noch raus _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
|
|
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.
|
|