#Image Objektnummer ist sehr hoch

Für allgemeine Fragen zur Programmierung mit PureBasic.
kevv
Beiträge: 31
Registriert: 28.11.2010 15:52

#Image Objektnummer ist sehr hoch

Beitrag von kevv »

Hallo
kriege ne meldung
[ERROR] #Image Objektnummer ist sehr hoch (über 100000), sind Sie dazu sicher?

weiß jemand warum ?


Code: Alles auswählen



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

image = CreateImage(#PB_Any, 390, 80)
If IsImage(image)
  CatchImage(image, ?Logo)
EndIf


; CreateImage(0, 390, 80)
; Debug IsImage(0)

OpenWindow(0, 0, 0, 320, 240, name$, #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ImageGadget(0, 0, 0, 400, 90, ImageID(image))

Repeat
Until WaitWindowEvent(1) = #PB_Event_CloseWindow



Demivec
Beiträge: 49
Registriert: 22.02.2008 20:49
Wohnort: Utah, USA

Re: #Image Objektnummer ist sehr hoch

Beitrag von Demivec »

Von #PB_Any generierte IDs sollten nicht wie konstante IDs wiederverwendet werden.

Ersetzen Sie diesen Code:

Code: Alles auswählen

image = CreateImage (#PB_Any, 390, 80) 
If IsImage (image) 
  CatchImage (image,? Logo) 
EndIf 
zu diesem Code:

Code: Alles auswählen

image  = CatchImage(#PB_Any, ?Logo) 
If IsImage (image) = 0
   ;fehler
EndIf 
Bild
kevv
Beiträge: 31
Registriert: 28.11.2010 15:52

Re: #Image Objektnummer ist sehr hoch

Beitrag von kevv »

Und was hab ich jetzt schon wieder falsch gemacht ?

Code: Alles auswählen


UseJPEGImageEncoder()

Procedure img_buffer()
  
  image = CreateImage(#PB_Any, 320, 240)
  
  If StartDrawing(ImageOutput(image))  
    Box(0, 0, 320, 240, RGB(255, 100, 255))
    StopDrawing()
  EndIf
  *puffer = EncodeImage(image , #PB_ImagePlugin_JPEG)
  FreeImage(image)
  
  ProcedureReturn *puffer
EndProcedure



*img = img_buffer()

image2 = CatchImage(#PB_Any, *img)
If IsImage(image2) = 0
  Debug "error" :End
EndIf



OpenWindow(0, 0, 0, 300, 300, name$, #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ImageGadget(0, 0, 0, 400, 90, ImageID(image3))

Repeat
Until WaitWindowEvent(1) = #PB_Event_CloseWindow


Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: #Image Objektnummer ist sehr hoch

Beitrag von Mijikai »

kevv hat geschrieben:Und was hab ich jetzt schon wieder falsch gemacht ?


...
Decoder fehlt :>

Code: Alles auswählen

UseJPEGImageEncoder()
UseJPEGImageDecoder()

Procedure img_buffer()
  
  image = CreateImage(#PB_Any, 320, 240)
  
  If StartDrawing(ImageOutput(image))  
    Box(0, 0, 320, 240, RGB(255, 100, 255))
    StopDrawing()
  EndIf
  *puffer = EncodeImage(image , #PB_ImagePlugin_JPEG)
  FreeImage(image)
  
  ProcedureReturn *puffer
EndProcedure



*img = img_buffer()

image2 = CatchImage(#PB_Any, *img)
If IsImage(image2) = 0
  Debug "error" :End
EndIf



OpenWindow(0, 0, 0, 300, 300, name$, #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ImageGadget(0, 0, 0, 400, 90, ImageID(image2))

Repeat
Until WaitWindowEvent(1) = #PB_Event_CloseWindow
kevv
Beiträge: 31
Registriert: 28.11.2010 15:52

Re: #Image Objektnummer ist sehr hoch

Beitrag von kevv »

:allright:

warum wird das den nicht automatisch includiert sobald man die function EncodeImage benutzt ?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: #Image Objektnummer ist sehr hoch

Beitrag von STARGÅTE »

Weil der Compiler nicht weiß welches Format zu benötigst und für das Standard-Format (*.bmp) kein Encoder gebraucht wird.
Die Encoder verbrauche Speicher in der finalen Exe, sodass der Einsatz vom Nutzer selbst entschieden werden kann.
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