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:

.RAR Datei herunterladen & entapcken
Gehe zu Seite Zurück  1, 2, 3
 
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
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 03.03.2007, 00:11    Titel: Antworten mit Zitat

http://wadepohl.homepage.t-online.de/fbas/imag/packen1.html
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
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: 03.03.2007, 12:55    Titel: Antworten mit Zitat

Jo, danke happy

/edit:
Prinzip habe ich jetzt verstanden. (dransezten & umarbeiten tu ich später)

/edit2:
Es gibt da doch noch ein Problem. Wie berechne ich nun die Bytes? wenn ich das mit anzahlbyt = lof(1) mache (die datei wurde mit binary as #1 geöffnet) stürzt es einfach ab neutral . Allein schon den speicher freizugeben mit imagecreate scheint er nicht richtig zu machen. außerdem ist es auch keine bilddatei, wo man sagen kann 400 hoch 300 breit!

Code:

'11.02.06 mit FB 0.15b ; by Volta
'Image gepackt in eine Datei schreiben

Option Explicit
'um diese Funktionen der gfxlib nutzen zu können muß ein 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

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

Dim As Integer breit, hoch, anzahlbyt, j, i, ff
Dim img As Integer Ptr
Dim bptr As UByte Ptr

'Screen 18,32
Screenres 320,200,32

breit = 400       'Bildbreite
hoch = 300         'Bildhöhe

img = ImageCreate (breit, hoch) 'Image erstellen

BLoad "aviplay.exe",img        'Bild laden

'Put (0, 50), img, PSet          'Image anzeigen
anzahlbyt = (breit * hoch * 4 ) +4 'Anzahl Byte


Dim Buffer (anzahlbyt) As UByte'in diesen Buffer wird das Image komprimiert

j = anzahlbyt

'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


Dim fName As String

fName = "output.img"

ff = FreeFile              'als Datei abspeichern

Open fname for binary Access write as #ff

  For i = 0 To j-1
    put #ff,, Buffer(i)
  next

Close #ff

Sleep
ImageDestroy img
End

_________________
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: 03.03.2007, 23:07    Titel: Antworten mit Zitat

So, nachdem ich mich von QB nach FB umgewöhnt habe, ist dieses, wunderbar funktionierendes Sample rausgekommen:
Code:

'11.02.06 mit FB 0.15b ; by Volta
'Image gepackt in eine Datei schreiben

Option Explicit
'um diese Funktionen der gfxlib nutzen zu können muß ein 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

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

Dim As integer breit, hoch, anzahlbyt, j, i, ff
Dim img As Integer Ptr
Dim bptr As UByte Ptr

dim src_len as longint
dim dest_len as longint

dim Eingangsdatei as string
dim Ausgangsdatei as string


Screenres 320,200,32: screen 18
width 80,30

input "Zu kompriemierende Datei: ", Eingangsdatei
input "Ausgangsdatei: ", Ausgangsdatei

open Eingangsdatei for binary as #1
src_len = lof(1)

print "Eingangsdateilaenge:"; src_len

img = Allocate(src_len)

if img = 0 then
    print "Reserviere Speicher ... fehlgeschlagen":sleep
    end
else
    print "Reserviere Speicher ... erfolgreich"
    print "Lade Datei..."
    BLoad Eingangsdatei,img        'Datei Laden
    anzahlbyt = src_len'Anzahl Byte
    Dim Buffer (anzahlbyt) As UByte 'in diesen Buffer wird das Image komprimiert
    j = anzahlbyt
   
    '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


    Dim fName As String

    fName = Ausgangsdatei
    ff = FreeFile              'als Datei abspeichern
    Open fname for binary Access write as #ff
   
    print "Erzeuge Ausgangsdatei..."
    For i = 0 To j-1
        put #ff,, Buffer(i)
    next
    print "... fertig"
    print "Ausgangsdateigroessee:"; j

    Close #ff
    Sleep :Deallocate img:End
end if

_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
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 FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3
Seite 3 von 3

 
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