 |
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 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 29.10.2007, 18:57 Titel: |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 30.10.2007, 15:08 Titel: |
|
|
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?
jö, dann macht 'Buffer = *Sprite' wenigstens Sinn  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 30.10.2007, 17:13 Titel: |
|
|
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 |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 30.10.2007, 20:04 Titel: |
|
|
ä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:
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 30.10.2007, 22:32 Titel: |
|
|
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 |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 31.10.2007, 00:24 Titel: |
|
|
also ich kenn mich jetzt gar nicht mehr aus |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 31.10.2007, 20:09 Titel: |
|
|
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 |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 11.11.2007, 13:32 Titel: |
|
|
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 |
|
 |
|
|
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.
|
|