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:

GFX-Buffer als String

 
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
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 20.08.2013, 14:45    Titel: GFX-Buffer als String Antworten mit Zitat

Hallo zusammen,

hat jemand eine Idee, wie man einen FBGFX Image Buffer in einen String konvertieren kann?

Ideal wäre es natürlich, wenn man diesen String auch wieder in einen Image-Buffer zurück konvertieren könnte..

Vielen Dank schon mal!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 20.08.2013, 14:51    Titel: Binärdaten in BASE64 codieren Antworten mit Zitat

Ich würde es mit BASE64 Kodier / Dekodier-Funktionen machen

http://www.freebasic-portal.de/downloads/bibliotheken/freebasic-extended-library-133.html

http://ext.freebasic.net/dev-docs/files/ext/conversion/base64-bi.html

http://www.freebasic-portal.de/code-beispiele/verschluesselung/base64-kodier-dekodier-funktion-110.html


Muss noch etwas angepasst werden bzw. gecastet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 20.08.2013, 15:14    Titel: Antworten mit Zitat

Hmm.. ich dachte eher daran einen String Pointer auf den Anfang eines Buffers zeigen zu lassen.. allerdings kenne ich mich nicht mit dem Aufbau der verschienen String-Datentypen aus.

Also es geht mir jetzt nicht darum, einen buffer in "lesbare" Zeichen zu übersetzen..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 20.08.2013, 16:17    Titel: Antworten mit Zitat

Ein String besteht nicht nur aus dem Pointer zu seinem Inhalt. Du müsstest dir also zuerst einen Speicherbereich für den String-Header reservieren und korrekt beschreiben. Inwieweit das "sicher" ist und nicht mit FB-internen Stringverwaltungsdingen in Konflikt kommt, kann ich dir aber nicht sagen. Pointer-mäßig problemlos ginge es mit einem ZSTRING, der aber ausscheidet, weil im Speicher sicher auch Nullbytes vorkommen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.08.2013, 18:09    Titel: Antworten mit Zitat

Code:

#include once "fbgfx.bi"                        'grafik includieren

open cons for output as #1                        'terminal output umlenkung öffnen

screenres 300, 300, 32                           'grafik öffnen

Dim Img as any Ptr                              'var für das img
Img = imagecreate(10, 20, 0, 32)                  'img erzeugen

Dim ImgPtr as Any Ptr                           'DataPointer
Dim ImgW as UInteger                           'Width
Dim ImgH as UInteger                           'Height
Dim ImgB as UInteger                           'BPP
Dim ImgP as UInteger                           'Pitch
ImageInfo(Img, ImgW, ImgH, ImgB, ImgP, ImgPtr)         'Bilddaten einholen

Dim TStr as String Ptr                           'Temp String erzeugen
TStr = CAllocate(SizeOf(UInteger) * 3)
Cast(Any Ptr, Cast(UInteger Ptr, TStr)[0]) = ImgPtr      'Bildspeicher als Stringspeicher setzen
Cast(UInteger Ptr, TStr)[1] = ImgH * ImgP * ImgB      'Bildgröße als datenlänge grösse setzen
Cast(UInteger Ptr, TStr)[2] = ImgH * ImgP * ImgB      'Bildgröße als alloc setzen

Print #1, Len(*TStr)                           'Stringdaten auf terminal ausgeben
Print #1, *TStr                                 'Stringdaten auf terminal ausgeben
Sleep 1000, 1

ImageDestroy(Img)                              'Bild wieder zerstören
'Ab jetzt darf nicht mehr auf das TStr zugegriffen werden, da duch ImageDestroy auch der Speicher für TStr zerstört wurde.
DeAllocate(TStr)
'Ab jetzt darf auf TStr überhaupt nicht merh zugegriffen werden, da dessen Speicher nicht mehr existiert

screen 0                                    'grafik schliessen
end 0                                       'sauberer exit


ist allerdings ne sehr heiße sache, und sollte wirklich nur im äußerstem Notfall angewendet werden.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 20.08.2013, 18:37    Titel: Antworten mit Zitat

Ich habe es zwar noch nicht eingesetzt, aber wenn du img nicht als ANY PTR, sondern als FB.Image PTR definierst, solltest du auf Breite, Höhe usw. direkt zugreifen können.
http://www.freebasic-portal.de/befehlsreferenz/interne-pixelformate-464.html
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.


Zuletzt bearbeitet von nemored am 20.08.2013, 18:40, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.08.2013, 18:39    Titel: Antworten mit Zitat

Das ist richtig. Allerdings sollte man darauf verzichten und lieber die imageinfo funktion nutzen, da sich das format und der interne Aufbau ändern könnte. (früher hab ich das direkt gemacht, allerdings gabs dann in der tat irgend wann mal ne umstellung, und dann gings nimmer. Seither nutz ich die (auch etwas langsamere) funktion, sicherheitshalber.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 20.08.2013, 18:45    Titel: Antworten mit Zitat

Der interne Aufbau interessiert mich ja nur, wenn ich meinen Header selbst schreibe (ich verstehe im Moment gar nicht, warum das im von mir verlinkten Artikel so gemacht wird, anstatt gleich img->height zu nutzen ...); sichergestellt muss nur sein, dass das UDT FB.Image weiterhin die Daten unter diesem Namen bereithält.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.08.2013, 18:48    Titel: Antworten mit Zitat

ach, so meinst du das. KK


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 20.08.2013, 18:56    Titel: Antworten mit Zitat

Warum sollte man binäre Daten in einen String umwandeln ?

Mir fällt da nur eine sinnvole Anwendung ein. In Textdateien speichern bzw. als Text versenden. Und genau da sollte man eine Base64 Codierung verwenden, sodass nicht ausversehen Zeichen umkodiert werden.

Der andere Punkt ist dass bei einem Nullbyte die Gefahr besteht dass so ein String plotzlich abgeschnitten werden könnte und so die Daten korumpiert werden. Diese Frage könnten allerdings einige Cracks klären.


Zuletzt bearbeitet von RockTheSchock am 20.08.2013, 18:58, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.08.2013, 18:58    Titel: Antworten mit Zitat

@RockTheSchock .. auch bei base64 kann dies passieren, und da ists sogar noch schlimmer, weil das automatisch den rest der darauffolgenden daten gleich mit zerstört.
Wenn es Übertragugnssicher werden soll, muss man ECC oder ähnliche Korrekturverfahren anwenden.

Nullbytes sind bei FB-Strings kein problem. Nur bei ZStrings, und die nutzt man ja kaum noch (außer ein paar API Aufrufe).


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 20.08.2013, 19:01    Titel: Antworten mit Zitat

ThePuppetMaster hat Folgendes geschrieben:
Nullbytes sind bei FB-Strings kein problem. Nur bei ZStrings, und die nutzt man ja kaum noch (außer ein paar API Aufrufe).
Ok wieder was dazu gelernt. Trotzdem gilt beim Versenden von Textdaten z.B. in Mails ist Vorsicht geboten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
storky



Anmeldungsdatum: 06.01.2013
Beiträge: 68

BeitragVerfasst am: 20.08.2013, 19:34    Titel: Antworten mit Zitat

Hey,

also wenn ich irgendwas in einen String bekommen möchte, bilde ich meistens die Struktur eines Strings nach und setze einen String ptr drauf.

Also ca

Code:

Type myStringT
   stAdd As Any Ptr
   stLen As UInteger
   stMem As UInteger
End Type

Dim as myStringT myString
Dim as String Ptr myStringPtr

myString.stAdd = Anfang vom Buffer      'Screenptr
myString.stLen = Länge vom Buffer        'w * h * (bit/8)
myString.stMem = Länge vom Buffer      'w * h * (bit/8)

myStringPtr = @myString



Dannach enthält man mit *myStringPtr Zugirff auf den neuen "String".
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 21.08.2013, 08:59    Titel: Antworten mit Zitat

@storky: Perfekt! Danke! Ich glaub genau das ist das was ich gesucht habe!!! grinsen

Und auch ein großes Dankeschon an alle anderen lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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
Seite 1 von 1

 
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