Impossible d'ouvrir le périphérique png en boucle
J'ai été bidouiller avec une fonction dans R, où, pour faire une histoire courte, j'ai un for
en boucle, et ce, à chaque étape, j'ai enregistrer un tracé à l'aide de png
puis immédiatement readPNG
de sorte que je peux extraire des informations RVB. J'ai ensuite faire une seconde intrigue, puis readPNG
ce que je puisse comparer le RVB des deux images.
Le problème est que je reçois un message d'erreur à propos de l'impossibilité de démarrer le png()
appareil, ou d'ouvrir le fichier pour l'écriture, après un certain nombre de boucles (peut être aussi peu que d'une poignée de boucle, ou comme quelques milliers).
Ici, c'est vraiment simplifié le code, mais il a l'essentiel, et génère le message d'erreur:
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
}
}
Et le message d'erreur:
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
À l'origine, j'avais graphics.off()
comme dev.off()
mais alors pensé que peut-être la boucle a été si rapide que la désactivation d'un appareil n'était pas assez rapide avant de devoir être à nouveau ouverte et il était "confus" en quelque sorte. J'ai aussi essayé d'utiliser Sys.sleep(0.1)
après chaque graphics.off
mais cela n'a pas aide non plus. Ai-je raté quelque chose de stupide et évident, ou est-ce juste un appareil bug?
source d'informationauteur Herc
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème, bien que n'étant pas dans une situation de boucle. Dans mon cas, c'était parce que j'étais en pointant le .png de sortie à un répertoire qui n'existe pas.
Une fois que j'ai créé le répertoire, et de le référencer correctement, l'erreur a disparu et j'ai eu mon .image png.
J'ai eu ce problème lors de l'enregistrement des parcelles dans une boucle aussi. @Dino Feu m'a donné une astuce, ma boucle de nom de fichier généré contient un caractère illégal...
De s'assurer que le nom de fichier est légal (cherchez des barres obliques, des arobases, apostrophes, etc.)