Erledigt: Wie Label für Bild errechnen ?

Anfängerfragen zum Programmieren mit PureBasic.
Led Zep
Beiträge: 7
Registriert: 08.01.2023 14:40

Erledigt: Wie Label für Bild errechnen ?

Beitrag von Led Zep »

Hallo Leute,

in einem Programm habe ich folgende DataSection:

Code: Alles auswählen

DataSection

bild0: 
IncludeBinary "C:\...\bild0.png"  
bild1: 
IncludeBinary "C:\...\bild1.png"  
bild2: 
IncludeBinary "C:\...\bild2.png"  
bild3: 
IncludeBinary "C:\...\bild3.png"  
 .
 .
 .
bild100:
IncludeBinary "C:\...\bild100.png"  
EndDataSection

also 101 Bilder. Eine Berechnung ergibt dann einen Wert zwischen 0 und 100, und dann soll das entsprechende Bild mittels

Code: Alles auswählen

auswahlbild  = CatchImage(#PB_Any, ?errechnetes Label)
ig1 = ImageGadget(#PB_Any,0,0 , ImageWidth(auswahlbild), ImageHeight(auswahlbild), ImageID(auswahlbild))
angezeigt werden. Mein Problem: Wie errechne ich das entsprechende Label?

Hätte ich mir mal vorher Gedanken gemacht. Habe eine Variable dimensioniert

Code: Alles auswählen

DIM Bildnum(100)
und die Labels alle eingelesen

Code: Alles auswählen

bild(0) = ?bild0
bild(1) = ?bild1
bild(2) = ?bild2
bild(3) = ?bild3
.
.
.
bild(100) = ?bild100
um dann das jeweilige Bild mittels Catchimage zu holen. Sorry für die unnötige Belästigung!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Wie Label für Bild errechnen ?

Beitrag von STARGÅTE »

du erstellst noch eine DataSection mit allen Labels als Integers und kannst dann dort hin verweisen.
Hier ein Beispiel mit String statt Bildern:

Code: Alles auswählen

DataSection
	Bild1:
	Data.s "Bild1"
	Bild2:
	Data.s "Bild2"
	Bild3:
	Data.s "Bild3"
	Bild4:
	Data.s "Bild4"
	Bilder:
	Data.i 0, ?Bild1, ?Bild2, ?Bild3, ?Bild4
EndDataSection


ErrechnetesLabel = 2
*Label = PeekI(?Bilder+ErrechnetesLabel*SizeOf(Integer))
Debug PeekS(*Label)


ErrechnetesLabel = 4
*Label = PeekI(?Bilder+ErrechnetesLabel*SizeOf(Integer))
Debug PeekS(*Label)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Re: Wie Label für Bild errechnen ?

Beitrag von Macros »

Ganz abhängig davon wie die Umstände und Anforderungen sind hätte ich hier ganz unterschiedliche Lösungen.

Sind die Bilder klein? Dann lade sie doch alle in den Speicher und nutze die Image Nummer als Schlüssel.
Also CatchImage(0, ?bild0) usw.

Sind sie groß, aber alle genau gleich groß? Dann kannst du ja x-mal die Bytegröße zu ?bild0 dazuaddieren. Aber das ist sehr unwahrscheinlich bei PNGs.
Also würde ich vermutlich ein Array anlegen.

Code: Alles auswählen

Dim ImagePTR.i(100)
ImagePTR(0)=?bild0
...
ImagePTR(100)=?bild100


auswahlbild  = CatchImage(#PB_Any, ImagePTR(Nummerdieduwillst))
ig1 = ImageGadget(#PB_Any,0,0 , ImageWidth(auswahlbild), ImageHeight(auswahlbild), ImageID(auswahlbild))
Und weil ich faul bin würde ich mir den Quellcode ausgeben lassen:

Code: Alles auswählen

For a=0 To 100
  Debug "ImagePTR("+Str(a)+") = ?bild"+Str(a)
Next
und das der Ordnung halber in ein include oder zumindest zusammenklappbar zwischen ;{ und ;}

Edit: Stargates Lösung ist eleganter. Mir war nicht klar, dass man Labeladressen in Datasections platzieren kann.
Bild
Antworten