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:

[GELÖST] TGA speichern...
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: 11.09.2007, 19:05    Titel: [GELÖST] TGA speichern... Antworten mit Zitat

Hallo!
Man nehme an, man hat einen FB Bildpuffer, und möchte diesen, OHNE externe Bibliotheken in ein unkompriemiertes TGA speichern. Wie geht das?
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick


Zuletzt bearbeitet von csde_rats am 14.09.2007, 15:58, insgesamt 3-mal bearbeitet
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: 11.09.2007, 19:11    Titel: Antworten mit Zitat

Man nehme an, man habe den Wikipedia-Artikel gelesen [und verstanden]...
_________________
» 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: 13.09.2007, 19:09    Titel: Antworten mit Zitat

Jaa, klasse sache, nur wenn allein der loader 300 zeilen lang ist, will ich gar nicht wissen wieviel man für einen halbwegsgut funktioniernden speicherer schreiben müsste...
_________________
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: 13.09.2007, 19:13    Titel: Antworten mit Zitat

das will ich auch nciht wissen...
aber man bekommt das sicher auch in weniger als 300 zeilen hin (wobei TGA-Loader in der Tat relativ groß sind), und man kann eben nicht alles in 10 Zeilen laden...
_________________
» 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
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 13.09.2007, 20:02    Titel: Antworten mit Zitat

Typischer Fall wieder einmal für folgenden Artikel:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/BilderVerwenden.html

Ansonsten noch Zusatzbemerkungen: Es macht in der Regel kaum Sinn, die hinterste und letzte Spezialität einer Dateispezifikation umzusetzen, jedoch aber schon so arbeiten, dass in dem Sinn unimplementierte Chunks ignoriert werden (soweit überhaupt möglich) oder bei bestimmten Attributen nur bestimmte Varianten unterstützt werden => klare "Nicht unterstützt"-Fehlermeldung zurückgeben.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
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: 13.09.2007, 20:16    Titel: Antworten mit Zitat

Ok. Ich glaube ich habe den "Default"-Dateikopf fertig:
Code:
Type TGA_HEADER Field = 1
    idlength        As Ubyte
    colourmaptype   As Ubyte
    datatypecode    As Ubyte
    colourmaporigin As Ushort
    colourmaplength As Ushort
    colourmapdepth  As Ubyte
    x_origin        As Ushort
    y_origin        As Ushort
    Width           As Ushort
    height          As Ushort
    bitsperpixel    As Ubyte
    imagedescriptor As Ubyte
End Type

dim shared TGA_DEF as TGA_HEADER
TGA_DEF.idlength=0
TGA_DEF.colourmaptype=0
TGA_DEF.datatypecode=2
TGA_DEF.colourmaporigin=0
TGA_DEF.colourmaplength=0
TGA_DEF.colourmapdepth=0
TGA_DEF.x_origin=0
TGA_DEF.y_origin=0
TGA_DEF.width=1
TGA_DEF.height=1
TGA_DEF.bitsperpixel=32
TGA_DEF.imagedescriptor=240 ' Binary=11110000 Hexadecimal=F0

Zitat:
Bits 1-4: Anzahl der Attributbits pro Bildpunkt
Bit 5: horizontale Lage des Nullpunkts (0 = links, 1 = rechts)
Bit 6: vertikale Lage des Nullpunkts (0 = unten, 1 = oben)
Bit 7-8: 0

Was ist damit gemeint? Ich habe jetzt es erstmal so gemacht:
Bits 1-4: 1111
Bit 5: 0
Bit 6: 0
Bit 7-8: 00

Soweit inordnung?
_________________
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: 13.09.2007, 20:42    Titel: Antworten mit Zitat

einfach ausprobieren... meistens ist bei unverstädnlcihen attributen ein wert von 0 richtig happy
_________________
» 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: 13.09.2007, 21:30    Titel: Antworten mit Zitat

Naja, die ganzen Values unter .colour kommen eh auf 0, da es ja bei 32 Bit keine Palette gibt xD.
Hm.
OK, wenn ich den Header geschrieben habe, dann einfach die mit GET besorgten Bilddaten dranklatschen (nat. nur im 32 Bit Modus)?!
Oder sind die bei nem uncomprimierten TGA noch irgendwie codiert??

Ich denk' mal, dass man die Metainfos und den ganzen Rest bei seite lassen kann, sind eh erst ab 2.0, und ein 1.0 TGA reicht ja völlig...
_________________
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: 13.09.2007, 21:37    Titel: Antworten mit Zitat

du musst dich ja nicht nur auf den deutschen artikel konzentrieren... der englische artikel ist wie zu erwarten war viel detailreicher und auch mit links zu den specs...
_________________
» 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: 13.09.2007, 21:51    Titel: Antworten mit Zitat

naja, detaillierter ist sie auf jeden falll nicht.

Zitat:
|--------|--------|------------------------------------------------------------|
| varies | varies | Image Data Field. |
| | | |
| | | This field specifies (width) x (height) pixels. Each |
| | | pixel specifies an RGB color value, which is stored as |
| | | an integral number of bytes. |
| | | |
| | | The 2 byte entry is broken down as follows: |
| | | ARRRRRGG GGGBBBBB, where each letter represents a bit. |
| | | But, because of the lo-hi storage order, the first byte |
| | | coming from the file will actually be GGGBBBBB, and the |
| | | second will be ARRRRRGG. "A" represents an attribute bit. |
| | | |
| | | The 3 byte entry contains 1 byte each of blue, green, |
| | | and red. |
| | | |
| | | The 4 byte entry contains 1 byte each of blue, green, |
| | | red, and attribute. For faster speed (because of the |
| | | hardware of the Targa board itself), Targa 24 images are |
| | | sometimes stored as Targa 32 images. |
| | | |


OK, also werden die eigtl. Bilddaten wie ein BMP gespeichert...
_________________
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: 13.09.2007, 21:53    Titel: Antworten mit Zitat

wie wär's damit, mal ne TGA-Datei zu "hacken"? Speichere mit einem Editor z.B. einen roten farbpunkt, einen blauen und einen grünen, dann dreh die reihenfolge mal um, stell das bild auf den kopf, etc... SO machen man das als hacker 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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 13.09.2007, 21:55    Titel: Antworten mit Zitat

wie detailiert willst Du es denn noch ? mehr geht eben nicht happy
Obwohl mich die 2Byte sache etwas verwundert... ARRRRRGGGGGBBBBB????
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
csde_rats



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

BeitragVerfasst am: 13.09.2007, 22:02    Titel: Antworten mit Zitat

hmm. wie schreibe ich einen !!ganzen!! FB Bildpuffer (ohne header happy ) in eine Datei??

Code:
Type TGA_HEADER Field = 1
    idlength        As Ubyte
    colourmaptype   As Ubyte
    datatypecode    As Ubyte
    colourmaporigin As Ushort
    colourmaplength As Ushort
    colourmapdepth  As Ubyte
    x_origin        As Ushort
    y_origin        As Ushort
    Width           As Ushort
    height          As Ushort
    bitsperpixel    As Ubyte
    imagedescriptor As Ubyte
End Type

dim shared TGA_DEF as TGA_HEADER
TGA_DEF.idlength=0
TGA_DEF.colourmaptype=0
TGA_DEF.datatypecode=2
TGA_DEF.colourmaporigin=0
TGA_DEF.colourmaplength=0
TGA_DEF.colourmapdepth=0
TGA_DEF.x_origin=0
TGA_DEF.y_origin=0
TGA_DEF.width=1
TGA_DEF.height=1
TGA_DEF.bitsperpixel=32
TGA_DEF.imagedescriptor=240 ' Binary=11110000 Hexadecimal=F0

screenres 640,480,32
open "lala.tga" for binary as #1
line(1,1)-(43,43), &hFFFFFF
dim LaLa as TGA_HEADER = TGA_DEF
LaLa.width=640
LaLa.height=480
put #1, , LaLa
dim as any ptr Lol
lol=imagecreate(640,480)
get(1,1)-(640,480), lol
put #1, , lol
close

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

mit eckigen klammern auslesen...?
_________________
» 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: 14.09.2007, 13:47    Titel: Antworten mit Zitat

Das Ende ist dann bei 640*480*4, oder?

EDIT:
Code:
for n as integer = 0 to (640*480*4)
    put #1,,lol[n]
next n

Zitat:
Command executed:
"C:\Developing\FreeBasic\fbc.exe" "M:\TGASave.bas"

Compiler output:
M:/TGASave.bas(64) error 66: Incomplete type in 'put #1,,lol'

Results:
Compilation failed

System:
FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 0.18 (08-13-2007) for win32 (target:win32)
OS: Windows XP (build 2600, Service Pack 2)
neutral
_________________
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: 14.09.2007, 14:32    Titel: Antworten mit Zitat

was ist lol? "incomplete type"? willst du einen Type byteweise abspeichern? das geht einfach mit Put #1,,Typename...
_________________
» 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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 14.09.2007, 14:47    Titel: Antworten mit Zitat

wenn die Daten eh schon unkomprimiert im 4byte Format daliegen,
dann mach ein UByte Ptr
allocate es auf die richtige groesse
lasse es mit get #ff,pos,@ptr,anzahlbyte
und dann nimmst memcpy und schiebst es direkt in dein FB Buffer
schneller gehts nimmer....
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
csde_rats



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

BeitragVerfasst am: 14.09.2007, 15:07    Titel: Antworten mit Zitat

@EP:
Ähem. Es geht hier um das speichern eines TGAs aus einem Bildpuffer, nicht umgehkehrt. zwinkern
@Jojo:
lol ist der any ptr auf den bildpuffer zwinkern

Code:
Type TGA_HEADER
    idlength        As Ubyte
    colourmaptype   As Ubyte
    datatypecode    As Ubyte
    colourmaporigin As Ushort
    colourmaplength As Ushort
    colourmapdepth  As Ubyte
    x_origin        As Ushort
    y_origin        As Ushort
    Width           As Ushort
    height          As Ushort
    bitsperpixel    As Ubyte
    imagedescriptor As Ubyte
End Type

dim shared TGA_DEF as TGA_HEADER
TGA_DEF.idlength=0
TGA_DEF.colourmaptype=0
TGA_DEF.datatypecode=2
TGA_DEF.colourmaporigin=0
TGA_DEF.colourmaplength=0
TGA_DEF.colourmapdepth=0
TGA_DEF.x_origin=0
TGA_DEF.y_origin=0
TGA_DEF.width=1
TGA_DEF.height=1
TGA_DEF.bitsperpixel=32
TGA_DEF.imagedescriptor=240 ' Binary=11110000 Hexadecimal=F0

screenres 640,480,32
Kill "lala.tga"
open "lala.tga" for binary as #1
line(1,1)-(43,43), &hFFFFFF
dim LaLa as TGA_HEADER = TGA_DEF
LaLa.width=640
LaLa.height=480

    put #1,,LaLa.idlength
    put #1,,LaLa.colourmaptype
    put #1,,LaLa.datatypecode
    put #1,,LaLa.colourmaporigin
    put #1,,LaLa.colourmaplength
    put #1,,LaLa.colourmapdepth
    put #1,,LaLa.x_origin
    put #1,,LaLa.y_origin
    put #1,,LaLa.Width
    put #1,,LaLa.height
    put #1,,LaLa.bitsperpixel
    put #1,,LaLa.imagedescriptor
dim as any ptr Lol
lol=imagecreate(640,480)
get(1,1)-(640,480), lol
for n as integer = 0 to (640*480*4)
    put #1,,lol[n]
next n
close

_________________
If hilfreicher_Beitrag then klick(location.here)

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



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 14.09.2007, 15:09    Titel: Antworten mit Zitat

Dir ist schon klar das ein FB Buffer (erstellt mit ImageCreate) einen Header hat ??
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
csde_rats



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

BeitragVerfasst am: 14.09.2007, 15:11    Titel: Antworten mit Zitat

Eternal_pain hat Folgendes geschrieben:
Dir ist schon klar das ein FB Buffer (erstellt mit ImageCreate) einen Header hat ??

Ach verdammt!
OK, so lässt es sich kompilieren, die TGA ist 1,17 MB groß.
Code:
#include "crt.bi"
Type TGA_HEADER
    idlength        As Ubyte
    colourmaptype   As Ubyte
    datatypecode    As Ubyte
    colourmaporigin As Ushort
    colourmaplength As Ushort
    colourmapdepth  As Ubyte
    x_origin        As Ushort
    y_origin        As Ushort
    Width           As Ushort
    height          As Ushort
    bitsperpixel    As Ubyte
    imagedescriptor As Ubyte
End Type

dim shared TGA_DEF as TGA_HEADER
TGA_DEF.idlength=0
TGA_DEF.colourmaptype=0
TGA_DEF.datatypecode=2
TGA_DEF.colourmaporigin=0
TGA_DEF.colourmaplength=0
TGA_DEF.colourmapdepth=0
TGA_DEF.x_origin=0
TGA_DEF.y_origin=0
TGA_DEF.width=1
TGA_DEF.height=1
TGA_DEF.bitsperpixel=32
TGA_DEF.imagedescriptor=240 ' Binary=11110000 Hexadecimal=F0

screenres 640,480,32
Kill "lala.tga"
open "lala.tga" for binary as #1
line(1,1)-(43,43), &hFFFFFF
dim LaLa as TGA_HEADER = TGA_DEF
LaLa.width=640
LaLa.height=480

    put #1,,LaLa.idlength
    put #1,,LaLa.colourmaptype
    put #1,,LaLa.datatypecode
    put #1,,LaLa.colourmaporigin
    put #1,,LaLa.colourmaplength
    put #1,,LaLa.colourmapdepth
    put #1,,LaLa.x_origin
    put #1,,LaLa.y_origin
    put #1,,LaLa.Width
    put #1,,LaLa.height
    put #1,,LaLa.bitsperpixel
    put #1,,LaLa.imagedescriptor
dim as any ptr Lol
lol=imagecreate(640,480)
get(1,1)-(640,480), lol
dim as ubyte ptr picdat
picdat = allocate(640*480*4)
memcpy(picdat, lol, (640*480*4))
for n as integer = 0 to (640*480*4)
    put #1,,picdat[n]
next n
close


EDIT:
Der Header der Vers. 2 ist exakt 31 Bytes lang:
Code:
for n as integer = 31 to (640*480*4)
    put #1,,picdat[n]
next n


Zitat:
Unbekannnter Fehler beim lesen des Bildes...
neutral
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick


Zuletzt bearbeitet von csde_rats am 14.09.2007, 15:15, insgesamt einmal bearbeitet
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 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