CatchImage?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
by night
Beiträge: 45
Registriert: 24.02.2007 21:52

CatchImage?

Beitrag von by night »

Hallo zusammen,

Ganz kurze Frage: Bis vor 2 Tagen konnte ich noch Bilder in meine .exe einbinden. Jetzt habe ich es aber irgwendwie vergessen, wie das noch funktioniert <) Ich weiß nicht mehr ob man das mit CatchImage oder mit Include macht. Oder doch mit beidem? Die Hilfe hilft mir nicht viel weiter.



MfG
PureBasic v4.00 (Windows - x86)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wahrscheinlich mit beidem :wink:

Code: Alles auswählen

DataSection
  Bild: ; label
  IncludeBinary #PB_Compiler_Home + "Examples\Sources\Data\PureBasicLogo.bmp"
  ;IncludeBinary "MeinBild.bmp"
EndDataSection

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 381, 68, "CatchImage - Example")
  Define.l MyImage
  MyImage = CatchImage(#PB_Any, ?Bild) ; Bild aus datasection catchen, bei Label Bild
  
  If MyImage And CreateGadgetList(WindowID(0))
    ImageGadget(0, 0, 0, 381, 68, ImageID(MyImage))
  EndIf
  
  While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
by night
Beiträge: 45
Registriert: 24.02.2007 21:52

Beitrag von by night »

Da werde ich auch nicht schlau draus :( Gibt es nicht eine einfachere Möglichkeit oder irre ich mich da?


/edit: Also zuerst das Bild mit "IncludeBinary" einbinden. Doch den Teil danach verstehe ich nicht.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 300, 240, "*****", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered) And CreateGadgetList (WindowID(0))
   LoadImage(0, "c:\****.bmp")
   ImageGadget(1, 10, 10, 280, 60, ImageID(0))
   TextGadget(2, 10, 80, 280, 60, "Prey erzählt die Geschichte von Tommy, einem Cherokee, der in einem Reservat festsitzt. Sein Leben ändert sich schlagartig, als eine Macht aus einer anderen Welt seine vergessen geglaubten spirituellen Kräfte erweckt ...", #PB_Text_Border)
   StringGadget(3, 50, 160, 200, 20, "                   ", #PB_String_ReadOnly)
   TextGadget(4, 10, 200, 280, 30, " <3 ts-soft <3", #PB_Text_Border)
EndIf
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow

So habe ich es bisher gemacht. Doch damit bindet er das Bild ja nicht ein.
PureBasic v4.00 (Windows - x86)
Benutzeravatar
50-Pfennig
Beiträge: 75
Registriert: 22.01.2007 22:24
Wohnort: 40764 Langenfeld
Kontaktdaten:

Beitrag von 50-Pfennig »

also mit

Code: Alles auswählen

IncludeBinary"image.bmp"
lädts du das Bild ja erstmal in den physikalischen Speicher vom Executable.
So, und wenn du das Bild jetzt benutzen willst, dann musst es mit CatchImage(.., ...) machen. Also

Code: Alles auswählen

CatchImage(0, ?label) ; So damit haste jetzt die ID vom Bild, und kannst dann das Bild benutzen

StartDrawing(ScreenOutput())
 DrawImage(UseImage(0), 50, 50) ; Und das Bild zeichnen
StopDrawing() 
Wenn du die Datei dann als Executable kompilierst, is das Bild eingebunden, und brauchst es nicht mit der Exe-Datei liefern.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Doch damit bindet er das Bild ja nicht ein.
Entweder LoadImage, also aus einer Datei, oder CatchImage, also aus einer
Datasection der Exe. Bei CatchImage ist die Adresse des Labels anzugeben,
das macht man durch voranstellen eines Fragezeichens.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
by night
Beiträge: 45
Registriert: 24.02.2007 21:52

Beitrag von by night »

50-Pfennig hat geschrieben:also mit

Code: Alles auswählen

IncludeBinary"image.bmp"
lädts du das Bild ja erstmal in den physikalischen Speicher vom Executable.
So, und wenn du das Bild jetzt benutzen willst, dann musst es mit CatchImage(.., ...) machen. Also

Code: Alles auswählen

CatchImage(0, ?label) ; So damit haste jetzt die ID vom Bild, und kannst dann das Bild benutzen

StartDrawing(ScreenOutput())
 DrawImage(UseImage(0), 50, 50) ; Und das Bild zeichnen
StopDrawing() 
Wenn du die Datei dann als Executable kompilierst, is das Bild eingebunden, und brauchst es nicht mit der Exe-Datei liefern.
Und anstatt DrawImage kann ich dann ImageGadget benutzen?
PureBasic v4.00 (Windows - x86)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Ja , aber dann statt useimage (gibt es unter 4 nicht mehr ) ImageID
benutzen.
Benutzeravatar
by night
Beiträge: 45
Registriert: 24.02.2007 21:52

Beitrag von by night »

Damit ich das verstehe, versuche ich mich jetzt einfach mal hier im Board am Code:

- OpenWIndow
- CreateGadgetList
- CatchImage
- ImageGadget

So?


/edit: Tu mich da glaube ich gerade ein bisschen schwer. Ein Beispielwäre toll.Damit ich weiß wie das aufgebaut wird <)
PureBasic v4.00 (Windows - x86)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Wo ist den jetzt noch das Problem?

ts-soft hat ein einwandfreies Beispiel gepostet das genau das tut wonach du gerade fragst.

Kurzform:

Code: Alles auswählen

DataSection
	Bild: IncludeBinary #PB_Compiler_Home + "Examples\Sources\Data\PureBasicLogo.bmp"
EndDataSection

OpenWindow(0,0,0,381,68,"CatchImage - Example",#PB_Window_SystemMenu | 1)
CreateGadgetList(WindowID(0))
ImageGadget(0,0,0,381,68,CatchImage(0,?Bild))

While WaitWindowEvent() ! 16 : Wend
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
by night
Beiträge: 45
Registriert: 24.02.2007 21:52

Beitrag von by night »

So habe ich es verstanden.

Danke für die Hilfe!
PureBasic v4.00 (Windows - x86)
Antworten