Kann man Bilder aus Imagegadget in Webviewgadget oder Webgadget darstellen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
EmmJott
Beiträge: 66
Registriert: 25.10.2024 12:23

Kann man Bilder aus Imagegadget in Webviewgadget oder Webgadget darstellen?

Beitrag von EmmJott »

Guude!

Ich schreibe für mein kleines Prog eine Hilfeseite, die in einem Unterfenster als Webgadget (oder Webviewgadget) und "interner" html-Datei (wie in der Webviewgadget-Hilfe im Beispiel "Beispiel: mit Inline-HTML-Code") gezeigt werden soll. So weit so gut, das funzt.

Jetzt hatte ich die Idee, die Bilder, die bereits im Programm enthalten sind (in Imagegadgets bzw. als IncludeBinary in DataSection) mittels "<img>"-Tag einbinden kann. Kann mich da jemand unterstützen?

Edit:
Hier (viewtopic.php?p=359123#p359123) hat Stargate eine Lösung für ein ähnliches Problem gezeigt. Ich habe nur gar keine Ahnung, wie das für mich umzusetzen ist. Die vage Vorstellung ist

Code: Alles auswählen

DataSection
  bild:
  IncludeBinary "C:\Users\user\Documents\Purebasic\abc.png"
  endof_bild:  
EndDataSection
mit ?bild und ?endof_bild Anfang und Ende des Speicherbereichs ermitteln, mit Base64Encoder einen base64string erzeugen und im Webgadget
das Bild mit <img src="data:image/png;base64," + base64-string> anzeigen.

Wenn das überhaupt geht - ich habe keine Ahnung, wie das mit Buffer und Speicherzugriff und Zeigern gemacht wird ...

2. Nachtrag: Damit niemand auf eine falsche Fährte gelockt wird. Es geht nicht um Fotos o.ä., sondern um Grafiken (meist PNG mit transparenten Anteilen), wie sie beispielsweise für Imagebuttons etc. verwendet werden, also relativ kleinformatig. Sinn der Sache ist, in einer Hilfe-Seite Funktionen der Buttons zu erläutern (weil ein Bild halt mehr als tausend Worte sagt) oder die Hilfeseite grafisch aufzupeppen (Pfeile, Striche, ...)
Zuletzt geändert von EmmJott am 14.02.2026 11:34, insgesamt 1-mal geändert.
Hauptsache: Niveau! Bin beim Pogrammieren seit Jahrzehnten konstant auf Anfängerniveau!
Benutzeravatar
Delle
Beiträge: 1162
Registriert: 10.05.2005 22:48

Re: Kann man Bilder aus Imagegadget in Webviewgadget oder Webgadget darstellen?

Beitrag von Delle »

Wieso speicherst du das Bild nicht einfach lokal auf der Platte (Temp-Ordner) und lädst es dann mit dem HTML-IMG-Tag ein?
PB 6.30 | Win 11
Benutzeravatar
EmmJott
Beiträge: 66
Registriert: 25.10.2024 12:23

Re: Kann man Bilder aus Imagegadget in Webviewgadget oder Webgadget darstellen?

Beitrag von EmmJott »

Hi,

ja, könnte ich machen, aber höchst ungern. Fühlt sich auch nicht richtig an, Daten erst in den Temp-Ordner zu exportieren, um die dann wieder importieren zu können. Erinnert ein wenig an Phil Collins ("you gotta get in to get out")
Hauptsache: Niveau! Bin beim Pogrammieren seit Jahrzehnten konstant auf Anfängerniveau!
Benutzeravatar
Delle
Beiträge: 1162
Registriert: 10.05.2005 22:48

Re: Kann man Bilder aus Imagegadget in Webviewgadget oder Webgadget darstellen?

Beitrag von Delle »

Naja umdreht kann man es auch so auslegen: es fühlt sich nicht richtig an, wenn Fotos innerhalb der Exe mitkommen und dann außerhalb der Exe verwendet werden sollen ;)
PB 6.30 | Win 11
Benutzeravatar
Delle
Beiträge: 1162
Registriert: 10.05.2005 22:48

Re: Kann man Bilder aus Imagegadget in Webviewgadget oder Webgadget darstellen?

Beitrag von Delle »

Eine Idee wäre noch die Fotos in einer DB mittels SetDatabaseBlob() zu speichern und auch zu inkludieren.

Das lässt sich vermutlich dann einfach auslesen und ausgeben...
PB 6.30 | Win 11
jogo
Beiträge: 147
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: Kann man Bilder aus Imagegadget in Webviewgadget oder Webgadget darstellen?

Beitrag von jogo »

ich weiß jetzt nicht, ob du mit html auch auf Images im speicher zugreifen kannst.
Ich hab dich aber jetzt so verstanden, dass du erstmal ein mitcompiliertes Bild im Programm verfügbar machen möchtest?

Code: Alles auswählen

OpenWindow(0, 100, 50, 380, 255, "Ein Fenster", #PB_Window_MinimizeGadget)
UsePNGImageDecoder()                            ;zum laden des icons für die taskleiste
; .... andere Sachen

CatchImage(3, ?logo)                          ;logo in den speicher laden // ist dann als Image #3 und wenn nötig mit ImageID(3) überall einsetzbar
gtk_window_set_icon_(WindowID(0), ImageID(3)) ;minibild für das taskleistensymbol zuweisen // ist ein gtk-api befehl aus dem forum // 128x128 funktioniert

;oder auch irgendwo in ein Imagegadget anzeigen:
ImageGadget(50,  5, 0, 31, 40, ImageID(3))                     ; Imagegadget für logo

; .... Ereignisschleife etc.

;ganz unten:
DataSection
  logo:
  IncludeBinary "/Pfad/zum/bild.png" ;logo für taskleiste (von super-icon)
EndDataSection

End 
Jetzt müßtest du also nur nur schauen, ob du mit dem Image im Webvievgadget was anfangen kannst.
Oder ich hab dich einfach nur falsch interpretiert ;-)
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
jogo
Beiträge: 147
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: Kann man Bilder aus Imagegadget in Webviewgadget oder Webgadget darstellen?

Beitrag von jogo »

ja - ok, ich hatte das Problem tatsächlich nicht verstanden :roll:
hab mir grad mal das Thema zum WebView angeschaut - da ist mein Beitrag natürlich keine Hilfe. Bis dahin hast das mit Garantie schon selbst umgesetzt. ;-)
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Benutzeravatar
Delle
Beiträge: 1162
Registriert: 10.05.2005 22:48

Re: Kann man Bilder aus Imagegadget in Webviewgadget oder Webgadget darstellen?

Beitrag von Delle »

Noch eine Idee: die Bilder zusätzlich als Base64-Strings mit im Code speichern.
PB 6.30 | Win 11
Benutzeravatar
EmmJott
Beiträge: 66
Registriert: 25.10.2024 12:23

Re: Kann man Bilder aus Imagegadget in Webviewgadget oder Webgadget darstellen?

Beitrag von EmmJott »

Also - die Bilder sind ja schon da! Nicht nur im Programm in der Datasection, sondern größtenteils bereits im Speicher (als Imagegadgets, Buttonimagegadgets, ...). Und jetzt nochmal als Base64-Strings in das Programm packen?
Hauptsache: Niveau! Bin beim Pogrammieren seit Jahrzehnten konstant auf Anfängerniveau!
jogo
Beiträge: 147
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: Kann man Bilder aus Imagegadget in Webviewgadget oder Webgadget darstellen?

Beitrag von jogo »

um Base64-Strings kommst ja nicht herum. Wenn man die genaue Größe der in Datasection enhaltenen IncludeBinary zur Laufzeit hätte, würdest du ja daraus diese Base64-Strings für dein WebView bauen können.
Habe nix PB-internes gefunden (MemorySize ist für diesen Zweck wohl ungeeignet), die exakte Größe dieser IncludeBinary zu ermitteln, um damit mit BildString = Base64Encoder(*EingabePuffer, EingabeGröße) deinen Base64-String zu bauen.
Aber wie du es auch wendest - du hast dadurch dein Bild immer 3x im Speicher (1x in der exe, 1x im Image, 1x im Base64-String). Bei kleinen Bildchen wohl nicht weiter schlimm...

Um die richtige Größe zu ermitteln könnte folgenes funktionieren (hab ich vor vielen Jahren mal mit vielen sound & textdateien gemacht
Gegeben:

Code: Alles auswählen

;-datensection
DataSection          
  bild0:
  IncludeBinary "data/pic0.png"   
  bild1:
  IncludeBinary "data/pic1.png"   
  dx:
  IncludeBinary "data/x.txt"       ;leere 0 byte dummi-datei, um auf diese weise das ende des letzten bildes zu errechnen
EndDataSection

;und dann:
*ad0 = ?bild0           ; start-speicheradresse für bild0i in *ad1
*ad1 = ?bild1           ; start-speicheradresse für bild0i in *ad2
*ad2 = ?dx              ; start-speicheradresse für dummy  in *ad3

;Länge der Bilder errechnen 
laenge_bild0 = *ad1 - *ad0    ;möglicherweise nochmal minus 2 Bytes - probieren...
laenge_bild1 = *ad2 - *ad1
Genaugenommen sollte dieser errechnete Wert exakt der Größe des Bildes entsprechen, welches du beim Compilieren in IncludeBinary importierst.
Jo - und dann:

Code: Alles auswählen

bild_0 = Base64Encoder(?bild0, laenge_bild0) 
Wie das dann mit dem WebView weitergeht, weiß ich leider nicht (noch nie gemacht)
Aber du hättest auf diese Weise einen (hoffentlich) funktionierenden Base64-String
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Antworten