deghe
Profilo di
Nome | deghe |
---|---|
Indirizzo email | n/a |
Messaggi | 2 |
-
- 2016-04-20 19:43:44
- Re: Visualizzare Immagine con Autorefresh
- Forum >> Principianti
- Ottima Idea...ho provato e funziona inserendo questo codice:
def on_loop(self): try: self._image_surf = pygame.image.load("PHD2_currentimage.png") except pygame.error, message: self.on_loop() self._image_surf.convert()
il problema è che nei log mi escono un sacco di errori del tipo:
libpng error: IDAT: CRC error
libpng warning: Ignoring bad adaptive filter type
perchè probabilmente riesce a leggerlo lo stesso anche se non è ancora stato scritto completamente...
ho provato anche ad implementare un controllo sul file per farlo leggere solo se chiuso... ma rimane sempre aperto a causa dell'elevata velocità di aggiornamento dell'immagine
-
- 2016-04-20 12:46:35
- Visualizzare Immagine con Autorefresh
- Forum >> Principianti
- Ciao a tutti,
sto cercando di realizzare un piccolo programma che mi permetta di visualizzare un'immagine (jpg) generata da uno script (chiamiamolo server) in c++ che lo preleva da una camera ccd e lo depositata ogni frazione di secondo in un file che si aggiorna continuamente.
Ho provato già con diverse funzioni in python, anche sfruttando pygame ma il problema è che talvolta lo script client legge l'immagine prima che questa sia stata scritta completamente dal server e si blocca dando un messaggio di formato immagine non valido.
questo l'ultimo script utilizzato:import pygame from pygame.locals import * class App: def __init__(self): self._running = True self._display_surf = None self._image_surf = None def on_init(self): pygame.init() self._display_surf = pygame.display.set_mode((480,320), pygame.HWSURFACE) self._running = True self._image_surf = pygame.image.load("PHD2_currentimage.png").convert() def on_event(self, event): if event.type == QUIT: self._running = False def on_loop(self): self._image_surf = pygame.image.load("PHD2_currentimage.png").convert() <-- Rileggo l'immagine che nel frattempo lo script "server" ha riscritto def on_render(self): self._display_surf.blit(self._image_surf,(0,0)) pygame.display.flip() def on_cleanup(self): pygame.quit() def on_execute(self): if self.on_init() == False: self._running = True while( self._running ): for event in pygame.event.get(): self.on_event(event) self.on_loop() self.on_render() self.on_cleanup() if __name__ == "__main__" : theApp = App() theApp.on_execute()
Lo script in c++ è modificabile anche se ci capisco gran poco.
PS
per velocizzare il processo di scrittura e lettura, utilizzo un filesystem di tipo ramfs su linux. (/var/lock/)
Il tempo di aggiornamento dell'immagine dipende dall'esposizione che il server applica alla camera ccd