我一直在摆弄 R 中的一个函数,长话短说,我有一个for
-loop,在每一步,我使用保存一个图png
,然后立即readPNG
这样我就可以提取RGB信息。然后我制作第二个情节,然后readPNG
这样我就可以比较两个图像的 RGB。
问题是我不断收到有关无法启动的错误消息png()
设备,或在多次循环后打开文件进行写入(可以少至少数循环,或多至几千个循环)。
这是真正简化的代码,但它具有最基本的要素,并生成错误消息:
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
}
}
以及错误消息:
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
本来我有graphics.off()
as dev.off()
但后来又想到,也许循环太快了,关闭一个设备在需要再次打开之前不够快,并且不知何故变得“混乱”。我也尝试过使用Sys.sleep(0.1)
每个之后graphics.off
,但这也没有帮助。我是否错过了一些愚蠢而明显的东西,或者这只是一个设备错误?