Bild in Programm einbinden?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Finde ich auch. Aber man kann nicht nur Bilder und Sounds, sondern alles, was einem zwischen die Finger kommt, mit einbinden. Mit einem Mix aus CreateFile() und WriteData() kann man die Datei dann wieder in eine beliebige Datei zurückschreiben.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Xenos
Beiträge: 114
Registriert: 24.01.2006 20:33
Wohnort: Dresden(hin und wieder)
Kontaktdaten:

Beitrag von Xenos »

Hmmm...

aber so was a la

Code: Alles auswählen

Global var.l
var.l = 2006

debug ?sektionxy
;...

End

DataSection

sektionxy:

Data.l var.l

EndDataSection
würde nicht gehen oder?
(Bitte hängt mich jetzt nicht an der fehlerhaften Syntax o.ä. auf, wie offensichtlich ist, bin ich kein Spezialist für die Datensektion...
:oops:
gô ni itte wa gô ni shitagae.
(Wenn du in ein Dorf kommst, richte dich nach seinen Gepflogenheiten - jap. Sprichwort.)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das ist von daher unfug, weil ein Data-Table daten enthält, die zur compilezeit feststehen.

variablen hingegen werden zur laufzeit verändert.
sie stehen zwar auch im datensegment und damit möglicher weise direkt neben den DATAs, werden aber eben zur laufzeit erstellt.

allerdings frage ich mich, wieso du ne variable in ne DataSection packen willst,
was hast du davon, sie zweimal im speicher zu haben?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
kiki
Beiträge: 155
Registriert: 06.05.2006 17:54

Beitrag von kiki »

So,?

Code: Alles auswählen

DataSection ;ab heir werden Bilder und andere Dateien eingebunden 
   MeinBild: IncludeBinary "C:\Bild.bmp" 
EndDataSection 

If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")


      
  Repeat
    EventID = WaitWindowEvent()
    
    If EventID = #PB_Event_Repaint
      LoadImage(1, MeinBild , 0)

        DrawImage(1, 20, 10)
        
      
    EndIf
    
  Until EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
  
EndIf

End   ; All the opened windows are closed automatically by PureBasic
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Nein, nicht LoadImage(), sondern CatchImage()!

Außerdem: Warum lädst du das Bild bei jedem Schleifendurchlauf neu?
Ein CatchImage() direkt unter die DataSection, das war's.
Das gecatchte Bild kannst du natürlich auch in ein Imagegadget() schieben, wenn du willst, zeichnen find ich persönlich nicht so toll.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

außerdem braucht man vor Draw-befehlen ein StartDrawing()...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Überdies übernimmt Windows das neuzeichnen von (Image-)Gadgets, was du sonst manuell machen musst...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
kiki
Beiträge: 155
Registriert: 06.05.2006 17:54

Beitrag von kiki »

es klappt immernoch nicht :oops:

Code: Alles auswählen

DataSection ;ab heir werden Bilder und andere Dateien eingebunden 
   MeinBild: IncludeBinary "C:\bild.bmp" 
EndDataSection 

If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")


      
      
      CatchImage(1, ?MeinBild , 0)
      FreeImage(1)
        CreateImage(1, 40, 80 , 10)

      
      
      
  Repeat
  EventID = WaitWindowEvent()
  Until EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
  
  
EndIf 
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag von Rubiko »

Code: Alles auswählen

DataSection ;ab heir werden Bilder und andere Dateien eingebunden
   MeinBild: IncludeBinary "c:\bild.bmp"
EndDataSection

If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")


     
     
      CatchImage(1, ?MeinBild , 0)
      CreateGadgetList(WindowID(0))
      ImageGadget(0, 10, 10, 50, 50, ImageID(1))

     
     
     
  Repeat
  EventID = WaitWindowEvent()
  Until EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
 
 
EndIf
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du solltest zu den neuen befehlen, die du einbaust, auch zumindest kurz die help lesen, und etwas logisch vorgehen.

CatchImage() erzeugt ein neues Bild und füllt es mit den daten in der DATA-Sec.

FreeImage() löscht ein Image aus dem Speicher.

CreateImage() erzeugt ein neues, leeres Image.

letzteres hast du wahrscheinlich falsch interpretiert.

ein Image zu haben bedeutet nur, es im speicher zu haben.
wenn du es auf dem bildschirm sehen willst, musst du es auch darstellen.

das wolltest du zuvor mit DrawImage() machen, wäre ja ein weg.

wenn du aber wie von AND vorgeschlagen ein ImageGadget benutzen willst,
dann musst du auch ein Gadget erzeugen.

schau mal in die Help zu ImageGadget.
und schau auch in CreateGadgetList.

PS:
@Rubiko

vielen dank.

wenn man den leuten ständig code vorkaut,
muss man sich nicht wundern,
wenn dauernd welche angeschissen kommen "Ey, gib ma Code"

deinen Beitrag empfand ich nun als wirklich contraduktiv,
da er nicht im mindesten zum selber denken angeregt hat.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten