Bildanzeige im Imagegadget

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Bildanzeige im Imagegadget

Beitrag von ProgOldie »

Hallo,

ich möchte mit PB5.0 auf VISTA ein Bild laden und im Fenster #ActorsWin als z.B. 30x30 Kachel in einem Imagegadget anzeigen. Zunächst 'mal möchte ich dazu erst einmal das Originalbild überhaupt anzeigen.

Code: Alles auswählen

If ImNr=LoadImage(#PB_Any, FileName)
    SetActiveWindow(#ActorsWin)
    ImGadget=ImageGadget(#PB_Any,0,0,40,40,ImNr,#PB_Image_Border)     
    SetGadgetState(ImGadget,ImNr)      
  Else
     MessageRequester("Image Viewer","Could not load image: "+FileName)
  EndIf 
Leider funktioniert allein schon das obige überhaupt nicht. Nach der erfolgreichen Auswahl des Bildes erscheint lediglich ein Rahmen, allerdings im falschen Fenster.
Wenn ich die Lösung hätte, wie muss ich es anstellen, damit ich statt des Originalbildes im Gadget nur eine 30*30-Kachel desselben erhalte? Erst eine Kopie des geladenen Bildes und diese dann resizen?

Vielleicht findet Ihr trotz der unbändigen Lust zum Testen der tollen neuen Version 5.10 Zeit zur Beantwortung.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Bildanzeige im Imagegadget

Beitrag von STARGÅTE »

Wie die meisten Befehle, die nicht direkt zur Image-Lib gehören, möchte auch ImageGadget() und SetGadgetState eine ImageID() und nicht die Image-Nummer.

Desweiteren erzeugt "ImNr=LoadImage(#PB_Any, FileName)" immer eine falsche Aussage, denn ImNr ist zum Zeitpunkt des vergleichs 0 und LoadImage gibt eine Nummer zurück.

Code: Alles auswählen

If ImNr=3
	Debug ImNr
Else
	Debug "ImNr ist immer noch "+Str(ImNr)
EndIf
Außerdem musst du UseGadgetList(WindowID()) nutzen, um weitere Gadgets hinzuzufügen:

So sollte dein Code funktionieren:

Code: Alles auswählen

ImNr=LoadImage(#PB_Any, FileName)
If IsImage(ImNr)
  UseGadgetList(WindowID(#ActorsWin))
  ImGadget = ImageGadget(#PB_Any,0,0,40,40, ImageID(ImNr), #PB_Image_Border)
  ;SetGadgetState(ImGadget, ImageID(ImNr))
Else
  MessageRequester("Image Viewer","Could not load image: "+FileName)
EndIf 
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
Antworten