Forum
>>
Principianti
>>
Visualizzare Immagine con Autorefresh
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da deghe |
2016-04-20 12:46:35 - Visualizzare Immagine con Autorefresh
|
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 |
|
Scritto da Claudio_F |
2016-04-20 19:13:05 - Re: Visualizzare Immagine con Autorefresh
|
Potresti fare una funzione on_load con la lettura del file protetta in un blocco try/except, che ritorna True se la lettura è andata a buon fine e False altrimenti. E nel ciclo principale qualcosa del genere:
if self.on_load(): self.on_render()Tra l'altro non è strettamente necessario fare una prima lettura nell'init dell'app. *** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione *** |
|
Scritto da deghe |
2016-04-20 19:43:44 - Re: Visualizzare Immagine con Autorefresh
|
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 |
Pagina: 1
Esegui il login per scrivere una risposta.