Aktuelle Zeit: 17.12.2018 05:10

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 50 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5
Autor Nachricht
 Betreff des Beitrags: Re: Bild hochladen
BeitragVerfasst: 28.03.2018 18:13 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hi stevie1401,

ja mit Purebasic ist das auch weniger ein Problem.

Aber wie macht man das (im Speicher) ohne File-Umweg unter SpiderBasic ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild hochladen
BeitragVerfasst: 28.03.2018 18:21 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
stevie1401 hat geschrieben:
Ich versuche gerade den decodierten String mit dieser Funktion mit Purebasic wieder in ein Image zu verwandeln:


Code:

Procedure DecodeStringToImage(String.s)
  Protected *Buffer, L, *StringAscii, Image
 
  *Buffer = AllocateMemory(StringByteLength(String)) ;Die Binärdatei ist IMMER kleiner, als der String, egal, wir kümmern uns nicht darum.
  If *Buffer
    CompilerIf #PB_Compiler_Unicode ;Obacht bei Unicode! Base64Decode benötigt den String in Ascii!
      *StringAscii = AllocateMemory(StringByteLength(String, #PB_Ascii))
      If *StringAscii
        PokeS(*StringAscii, String, -1, #PB_Ascii | #PB_String_NoZero)
;        L = Base64Decoder(*StringAscii, MemorySize(*StringAscii), *Buffer, MemorySize(*Buffer))
        FreeMemory(*StringAscii)
      EndIf
    CompilerElse
      ;Alles easy, kein Unicode
      L = Base64Decoder(@String, StringByteLength(String), *Buffer, MemorySize(*Buffer))
    CompilerEndIf
   
    If L
      Image = CatchImage(#PB_Any, *Buffer, L)
    EndIf
    FreeMemory(*Buffer)
  EndIf
 
 
  Debug string
  Debug image
 
  ProcedureReturn Image
EndProcedure





Leider kommt die Fehlermeldung, dass das Image nicht initialisiert sei...


Ich denke du übergibst einfach falsche Werte an die Funktion.

Dein korrekter String muss so lauten:
"iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAABAUlEQVR4nO3RMREAIBDAsJ8RgX8puAIZdMiQvXeds/alY34HYEiaITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITEP2+OMVio7gT0AAAAASUVORK5CYII="

ohne "data:image/png;base64," .

Diesen Text musst du noch eliminieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild hochladen
BeitragVerfasst: 28.03.2018 19:18 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Ich habe mal die vollkommen fehlerhafte Base64-Funktion angepasst und noch etwas wichtigen Offset beigefügt.

Code:
EnableExplicit

UsePNGImageDecoder() ;Ganz wichtig! Es handelt sich ja um eine PNG-Datei.

#Xml = 0
#Dialog = 0

Global Event, DialogImage, Bild

Global base64.s = "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAABAUlEQVR4nO3RMREAIBDAsJ8RgX8puAIZdMiQvXeds/alY34HYEiaITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITEP2+OMVio7gT0AAAAASUVORK5CYII="

;Ich habe mal die vollkommen verhunste Funktion angepasst.
Procedure DecodeStringToImage(String.s)
  Protected *Buffer, L, *StringAscii
 
  *StringAscii = Ascii(String)
  *Buffer = AllocateMemory(99999) ;StringByteLength(String) ist Blödsinn.
  Base64DecoderBuffer(*StringAscii, MemorySize(*Buffer), *Buffer, MemorySize(*Buffer))
  ;FreeMemory(*StringAscii)
 
  Bild = CatchImage(#PB_Any, *Buffer)
  ;FreeMemory(*Buffer)
 
  Debug string
EndProcedure

If LoadXML(#Xml, GetCurrentDirectory()+"imgdiag.xml") And XMLStatus(#Xml) = #PB_XML_Success
  CreateDialog(#Dialog)
 
  If OpenXMLDialog(#Dialog, #Xml, "ImageTest", 200, 200)
   
    DecodeStringToImage(base64)
   
    DialogImage = DialogGadget(#Dialog, "image_1")
    SetGadgetState(DialogImage, ImageID(Bild))
   
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
   
  Else
    Debug "Dialog-Error: " + DialogError(#Dialog)
  EndIf
 
Else
  Debug "XML-Fehler: " + XMLErrorLine(#Xml) + ": " + XMLError(#Xml)
EndIf


"imgdiag.xml" : (Erstellt mit einen erstklassigen DialogDesigner (Gruss: HeX0R) )
Code:
<?xml version="1.0" encoding="UTF-8"?>

<dialogs>
  <window name="ImageTest" text="Image-Test" width="800" height="600" flags="#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered" id="0">
    <frame name="frame_1">
      <image name="image_1" flags="#PB_Image_Border" id="img0"/>
    </frame>
  </window>
</dialogs>


So funktioniert es unter PureBasic.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild hochladen
BeitragVerfasst: 28.03.2018 21:19 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Warum kann man unter Spiderbasic nicht einfach so, oder ähnlich den Encode-String verwenden ?

LoadImage(0, "url(\''"+EncodeImage(bild, #PB_ImagePlugin_PNG)+"'\')")


In JavaScript geht das doch auch ähnlich.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild hochladen
BeitragVerfasst: 29.03.2018 08:40 
Offline
Benutzeravatar

Registriert: 11.01.2009 16:30
Wohnort: Langerringen
ccode_new hat geschrieben:
Warum kann man unter Spiderbasic nicht einfach so, oder ähnlich den Encode-String verwenden ?

LoadImage(0, "url(\''"+EncodeImage(bild, #PB_ImagePlugin_PNG)+"'\')")


In JavaScript geht das doch auch ähnlich.


Wozu das url() ?

So sollte es doch funktionieren:
Code:
LoadImage(0, EncodeImage(bild, #PB_ImagePlugin_PNG))

_________________
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild hochladen
BeitragVerfasst: 29.03.2018 09:24 
Offline

Registriert: 19.10.2014 15:51
Erst einmal vielen Dank an alle für eure Mithilfe!

Ich bekomme bei der NEUEN Procedure leider immer einen Speicherzugriffsfehler:

Code:

Procedure DecodeStringToImage(String.s)
  Protected *Buffer, L, *StringAscii,image
 
  *StringAscii = Ascii(String); geht nur mit PB 5.6x
  *Buffer = AllocateMemory(99999) ;StringByteLength(String) ist Blödsinn.
  Base64DecoderBuffer(*StringAscii, MemorySize(*Buffer), *Buffer, MemorySize(*Buffer))  ;hier sagt PB: ungültiger Speicherzugriff (Lesefehler an Adresse 93593600)
  ;FreeMemory(*StringAscii)
 
 image= CatchImage(#PB_Any, *Buffer)
  ;FreeMemory(*Buffer)
   ProcedureReturn Image
  Debug string
EndProcedure


_________________
Ich programmiere plattformunabhängig und suche immer Lösungen für alle Plattformen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild hochladen
BeitragVerfasst: 29.03.2018 09:30 
Offline

Registriert: 19.10.2014 15:51
Wie bekomme ich die Procedure unter PB 5.6x lauffähig?

Code:
Procedure DecodeStringToImage(String.s)
  Protected *Buffer, L, *StringAscii, Image
 
  *Buffer = AllocateMemory(StringByteLength(String)) ;Die Binärdatei ist IMMER kleiner, als der String, egal, wir kümmern uns nicht darum.
  If *Buffer
    CompilerIf #PB_Compiler_Unicode ;Obacht bei Unicode! Base64Decode benötigt den String in Ascii!
      *StringAscii = AllocateMemory(StringByteLength(String, #PB_Ascii))
      If *StringAscii
        PokeS(*StringAscii, String, -1, #PB_Ascii | #PB_String_NoZero)
        L = Base64Decoder(*StringAscii, MemorySize(*StringAscii), *Buffer, MemorySize(*Buffer))  ;<<-- läuft nicht unter PB 5.6x
        FreeMemory(*StringAscii)
      EndIf
    CompilerElse
      ;Alles easy, kein Unicode
      L = Base64Decoder(@String, StringByteLength(String), *Buffer, MemorySize(*Buffer)) ;<<-- läuft nicht unter PB 5.6x
    CompilerEndIf
   
    If L
      Image = CatchImage(#PB_Any, *Buffer, L)
    EndIf
    FreeMemory(*Buffer)
  EndIf
 
 
  Debug string
  Debug image
 
  ProcedureReturn Image
EndProcedure





_________________
Ich programmiere plattformunabhängig und suche immer Lösungen für alle Plattformen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild hochladen
BeitragVerfasst: 29.03.2018 09:36 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
Die Funktion wurde umbenannt:
Geschichte - 2. März 2017 : Version 5.60 hat geschrieben:
- Geändert: Base64Decoder() in Base64DecoderBuffer() umbenannt

_________________
BildBildBildBildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild hochladen
BeitragVerfasst: 29.03.2018 12:06 
Offline

Registriert: 19.10.2014 15:51
Das weiss ich. Ich bekomme es aber nicht umgeschrieben, da ich das nicht verstehe.

_________________
Ich programmiere plattformunabhängig und suche immer Lösungen für alle Plattformen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bild hochladen
BeitragVerfasst: 29.03.2018 17:27 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Zitat:
Wozu das url() ?

So sollte es doch funktionieren:
Code:
LoadImage(0, EncodeImage(bild, #PB_ImagePlugin_PNG))


Sollte ist gut ;)

Also so funktioniert es bei mir nicht.

Weder mit Firefox, noch mit Opera, .... wird auf dieser Weise ein Bild geladen.

Es geht nur innerhalb von Loaded(Type, Filename$, ObjectId)

Code:
Global bildchen

Procedure Loaded(Type, Filename$, ObjectId)
  bildchen = ObjectId ;Außerhalb der Funktion nicht zulässig. Warum ?
  Debug bildchen
  SetGadgetState(0, ImageID(ObjectId)) ;So kann man sich helfen.
EndProcedure

BindEvent(#PB_Event_Loading, @Loaded())
BindEvent(#PB_Event_LoadingError, @LoadingError()
LoadImage(100, EncodeImage(bild, #PB_ImagePlugin_PNG))



Anpassung der Funktion.

Code:
UsePNGImageDecoder() ;Ganz wichtig! Es handelt sich ja um eine PNG-Datei.

Global Bild, base64.s = "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAABAUlEQVR4nO3RMREAIBDAsJ8RgX8puAIZdMiQvXeds/alY34HYEiaITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITGGxBgSY0iMITEP2+OMVio7gT0AAAAASUVORK5CYII="

Procedure DecodeStringToImage(String.s, Speicher)
  Protected *Buffer, image
 
  *Buffer = AllocateMemory(Speicher)
  PokeS(*Buffer, String, -1, #PB_Ascii)
  Base64DecoderBuffer(*Buffer, MemorySize(*Buffer), *Buffer, MemorySize(*Buffer))
  image= CatchImage(#PB_Any, *Buffer)
  FreeMemory(*Buffer)
  ProcedureReturn Image
EndProcedure

;Aufruf der Funktion
Bild = DecodeStringToImage(base64, 99999)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 50 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye