Sto girando intorno con una funzione in R, dove, per farla breve, ho un for
-loop, e ad ogni passaggio, salvo un grafico usando png
, quindi immediatamente readPNG
in modo che io possa estrarre informazioni RGB. Quindi faccio un secondo grafico, quindi readPNG
così posso confrontare l'RGB delle due immagini. Il problema è che continuo a ricevere un messaggio di errore sull'impossibilità di avviare il dispositivo png()
o di aprire il file per la scrittura, dopo un numero di cicli (può essere ridotto a una manciata di loop o a pochi mille).Impossibile aprire il dispositivo png in loop
qui è davvero semplificato codice, ma ha lo stretto necessario, e genera il messaggio di errore:
testfun<-function(beg,fini)
{
library(png)
setwd("D://mydirectory")
for (i in beg:fini)
{
png("test.png",width=277,height=277) #candidate image
par(mai=c(0,0,0,0))
plot(1,type="n",ann=FALSE,xlim=c(0,255),ylim=c(0,255),
xaxt="n",yaxt="n",frame.plot=F)
polygon(x=c(10,60,60),y=c(10,10,60),col="red")
graphics.off()
image<-readPNG("test.png")
#code where I get rgb values for original
png("test2.png",width=277,height=277) #candidate image with diferent params
par(mai=c(0,0,0,0))
plot(1,type="n",ann=FALSE,xlim=c(0,255),ylim=c(0,255),
xaxt="n",yaxt="n",frame.plot=F)
polygon(x=c(10,60,60),y=c(10,10,60),col="blue")
graphics.off()
image<-readPNG("test2.png")
#code where I get rgb values for second image, and compare
}
}
E il messaggio di errore:
Error in png("test.png", width = 277, height = 277) :
unable to start png() device
In addition: Warning messages:
1: In png("test.png", width = 277, height = 277) :
Unable to open file 'test.png' for writing
2: In png("test.png", width = 277, height = 277) : opening device failed
Originariamente avevo graphics.off()
come dev.off()
ma poi pensai che il loop fosse così veloce che spegnere un dispositivo non era abbastanza veloce prima di dover essere di nuovo aperto e in qualche modo si stava "confondendo". Ho anche provato a utilizzare Sys.sleep(0.1)
dopo ogni graphics.off
, ma non è stato di alcun aiuto. Mi sto perdendo qualcosa di stupido e ovvio, o si tratta solo di un bug del dispositivo?
@Your domanda finale : non ci sono problemi con dev.off, il codice viene eseguito in sequenza. Quindi, per quanto velocemente tutto accada, prima viene ucciso il dispositivo e quindi viene aperto un nuovo dispositivo. –
Esegui questo codice in una console interattiva o utilizzando ad es. 'Rscript'. E, 'png' funziona con un codice ancora più minimale, ad es. : 'png (" bla.png "); trama (1:10); dev.off()'. –
Invio la funzione da Tinn-R, quindi la chiamo da Rgui. Png funziona bene da solo. Ma ho appena scritto un semplice test in cui avevo il codice che hai suggerito, in un ciclo. L'ho provato 10 volte, nessun problema. Effettuato 100 volte e ottenuto questo: Errore in png ("test3.png"): impossibile avviare il dispositivo png() Inoltre: Messaggi di avviso: 1: In png ("test3.png"): Impossibile apri il file 'test3.png' per scrivere 2: In png ("test3.png"): dispositivo di apertura fallito (Mi dispiace, sono nuovo e la formattazione di un commento mi causa ancora problemi). – Herc