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:

lib zum farben hoch-/runterschrauben
Gehe zu Seite Zurück  1, 2
 
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
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 29.10.2007, 18:57    Titel: Antworten mit Zitat

Code:
Function SaveImage(Sprite As _OLD_HEADER Ptr, ByVal File As String, Format As Integer, FormAttrib As Integer)
   Dim Dib As FIBITMAP Ptr
   Dim Buffer As _OLD_HEADER
   Buffer = *Sprite
   
   Dib = FreeImage_Allocate(Buffer.width, Buffer.height, Buffer.bpp)
   
   ' Die Bilddaten kopieren...
   MemCpy FreeImage_GetBits(Dib), CPtr(ZString Ptr, Sprite) + 4, Buffer.width * Buffer.height * 4
   Result = FreeImage_Save(Format, Dib, StrPtr(File), FormAttrib)
   
   FreeImage_Unload(Dib)
   Return Result
End Function


kompiliert mit -lang deprecated, weil sonst auch das GetImage aus dem Portal nicht funktioniert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 30.10.2007, 15:08    Titel: Antworten mit Zitat

Wenn du das mit '-lang deprecated' kompilierst sollte schon _OLD_HEADER zu einer Fehlermeldung führen, da dies nur mit 'namespace FB' also '-lang fb' in der fbgfx.bi definiert ist.
"_OLD_HEADER Ptr" ist auch nicht schlecht wo hast du das denn her?
grinsen jö, dann macht 'Buffer = *Sprite' wenigstens Sinn durchgeknallt
_________________
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
csde_rats



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

BeitragVerfasst am: 30.10.2007, 17:13    Titel: Antworten mit Zitat

Code:
#include "FITut.bi"
#include "fbgfx.bi"
using fb

FUNCTION SaveImage(ByRef Sprite AS _OLD_HEADER, BYVAL File AS STRING, FORMAT AS INTEGER, FormAttrib AS INTEGER) as integer
   DIM Dib AS FIBITMAP PTR
   DIM Buffer AS _OLD_HEADER
   dim result as integer
   Buffer = Sprite
   
   with Sprite
    Dib = FreeImage_Allocate(.WIDTH, .height, .bpp)
   end with
   
   ' Die Bilddaten kopieren...
   with Sprite
   MemCpy FreeImage_GetBits(Dib), CPTR(ZSTRING PTR, VarPtr(Sprite)) + 4, .WIDTH * .height * 4
   end with
   Result = FreeImage_Save(FORMAT, Dib, STRPTR(File), FormAttrib)
   
   FreeImage_Unload(Dib)
   RETURN Result
END FUNCTION



Nö, ich hab jetz keinen bock mehr den code zu testen, ja?
http://www.freebasic-portal.de/index.php?s=reftopic&id=464
.

n bissl nachdenkn verlang ich noch von den leutz hier, ja?
wenn ich einen pointer brauche mache ich mir einen! gaaanz einfach!?
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick


Zuletzt bearbeitet von csde_rats am 30.10.2007, 20:45, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 30.10.2007, 20:04    Titel: Antworten mit Zitat

äh, wenn ich das LoadImage dingens ohne -lang deprecated mache, kommt nur eine Access Violation.

@csde_rats: und wieso ist _OLD_HEADER Ptr so abwegig? normal übergibt man ja ein Any Ptr zu einem ImageBuffer. Und da dem ImageBuffer ja ein _OLD_HEADER vorangestellt ist, ist es dann ein _OLD_HEADER Ptr! Oder?

DANKE FÜR DEN CODE!!

EDIT: mit dem Kopf durch die Mauer wollen

Code:
fitest#.bas(68) error 29: Expected pointer, before ')'
      MemCpy FreeImage_GetBits(Dib), CPtr(ZString Ptr, Sprite) + 4, .WIDTH * .height * 4
                                                             ^


Braucht ja doch nen Ptr...

Und wenn du Funktion einen _OLD_HEADER verlangt, wie soll ich ihr dann einen FB-Bildpuffer übergeben? Resultat: Type mismatch. Und Cast(_OLD_HEADER, meinFB_Bildpuffer) funzt auch nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 30.10.2007, 22:32    Titel: Antworten mit Zitat

durchgeknallt durchgeknallt durchgeknallt Wer ist denn eigentlich auf die Idee mit Sprite AS _OLD_HEADER Ptr gekommen?

Eigentlich soll doch der Pointer auf ein Image (AS ANY PTR) übergeben werden, oder?
Nicht nur ein Pointer auf den Typ _OLD_HEADER!

Warum denn nur Images mit dem alten Header?
Ab FBVersion 0.17 wird meist die neue Headerversion automatisch erzeugt!
_________________
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
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 31.10.2007, 00:24    Titel: Antworten mit Zitat

also ich kenn mich jetzt gar nicht mehr aus
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 31.10.2007, 20:09    Titel: Antworten mit Zitat

So würde ich es machen:
Dies ist nicht getestet, da ich keine FreeImage.dll habe.
Ob die FreeImage-Funktionen hier richtig angewendet wurden weiß ich nicht!
FBC meckert aber nicht beim kompilieren!
Code:
#Include once "FreeImage.bi"
#Include once "crt.bi"

Function SaveImage(Byval Sprite As Any Ptr, Byref File As String, _
                   Byval FORMAT As Integer, Byval FormAttrib As Integer) as Integer
  Dim Dib As FIBITMAP Ptr
  Dim Result As Integer
  Dim As Uinteger Ptr buffer = Sprite 'Damit der Imageheader besser ausgelesen werden kann
  Dim As Uinteger bpp, breit, hoch , hbyts
  'Welcher Imageheader ist es denn?
  If buffer[0]=7 Then  'neuer Header
    bpp = buffer[1]  'dies sind Byte per Pixel
    breit = buffer[2]
    hoch = buffer[3]
    hbyts = 32
  Else  'alter Header
    bpp = buffer[0] And 7  'dies sind Byte per Pixel
    breit = (buffer[0] And &Hfff8) Shr 3
    hoch = (buffer[0] And &Hffff0000) Shr 16
    hbyts = 4
  End If
 
  Dib = FreeImage_Allocate(breit, hoch, bpp)
 
  ' Die Bilddaten kopieren...
  MemCpy FreeImage_GetBits(Dib), Cast(Ubyte Ptr, Sprite + hbyts), breit * hoch * bpp
  FreeImage_FlipVertical(Dib)'war das nicht bei FreeImage nötig????
  Result = FreeImage_Save(FORMAT, Dib, Strptr(File), FormAttrib)
 
  FreeImage_Unload(Dib)
  Return Result
End Function
...
...
...

_________________
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
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 11.11.2007, 13:32    Titel: Antworten mit Zitat

volta hat Folgendes geschrieben:
So würde ich es machen:
Dies ist nicht getestet, da ich keine FreeImage.dll habe.
Ob die FreeImage-Funktionen hier richtig angewendet wurden weiß ich nicht!
FBC meckert aber nicht beim kompilieren!
Code:
Code:

#INCLUDE ONCE "FreeImage.bi"
#INCLUDE ONCE "crt.bi"

FUNCTION SaveImage(BYVAL Sprite AS ANY PTR, BYREF File AS STRING, _
                   BYVAL FORMAT AS INTEGER, BYVAL FormAttrib AS INTEGER) AS INTEGER
  DIM Dib AS FIBITMAP PTR
  DIM Result AS INTEGER
  DIM AS UINTEGER PTR buffer = Sprite 'Damit der Imageheader besser ausgelesen werden kann
  DIM AS UINTEGER bpp, breit, hoch , hbyts
  'Welcher Imageheader ist es denn?
  IF buffer[0]=7 THEN  'neuer Header
    bpp = buffer[1]  'dies sind BYTE per Pixel
    breit = buffer[2]
    hoch = buffer[3]
    hbyts = 32
  ELSE  'alter Header
    bpp = buffer[0] AND 7  'dies sind BYTE per Pixel
    breit = (buffer[0] AND &Hfff8) SHR 3
    hoch = (buffer[0] AND &Hffff0000) SHR 16
    hbyts = 4
  END IF
 
  Dib = FreeImage_Allocate(breit, hoch, bpp)
 
  ' Die Bilddaten kopieren...
  MemCpy FreeImage_GetBits(Dib), CAST(UBYTE PTR, Sprite + hbyts), breit * hoch * bpp
  FreeImage_FlipVertical(Dib)'war das nicht bei FreeImage nötig????
  Result = FreeImage_Save(FORMAT, Dib, STRPTR(File), FormAttrib)
 
  FreeImage_Unload(Dib)
  RETURN Result
END FUNCTION
...
...
...


Aborting due to runtime error segment violation signal in SAVEIMAGE()

x_x
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
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
Seite 2 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