Seite 1 von 1

#Image Objektnummer ist sehr hoch

Verfasst: 05.07.2019 02:14
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




Re: #Image Objektnummer ist sehr hoch

Verfasst: 05.07.2019 03:18
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 

Re: #Image Objektnummer ist sehr hoch

Verfasst: 06.07.2019 13:37
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



Re: #Image Objektnummer ist sehr hoch

Verfasst: 06.07.2019 13:52
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

Re: #Image Objektnummer ist sehr hoch

Verfasst: 06.07.2019 14:12
von kevv
:allright:

warum wird das den nicht automatisch includiert sobald man die function EncodeImage benutzt ?

Re: #Image Objektnummer ist sehr hoch

Verfasst: 06.07.2019 14:40
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.