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
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.