我正在尝试制作一个简单的“动画”。这是我正在使用的代码,它运行得相当好:
# Use "png" library
library(png)
# Load the images
img1 <- readPNG("filename1.png")
img2 <- readPNG("filename2.png")
# Set up the plot area
plot(10, ann=FALSE, axes=FALSE, asp=1, xlim=c(-1, 1), ylim=c(-1, 1))
# Get the plot information so the image will fill the plot box
lim <- par()
while(TRUE) {
rasterImage(img1, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
Sys.sleep(0.1)
rasterImage(img2, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
Sys.sleep(0.1)
}
我遇到的问题是,每次调用rasterImage
时,新图像都添加到绘图中,并且不必要地使其变得更重和更重(如果您保存最终图像在足够数量的循环之后,将创建一个非常重的文件。)
如果我在循环中调用plot
函数,则会在长白图之后显示每个图像,除了令人不安之外,结果也毫无用处。
有没有解决方法,即快速显示图像但避免将图像添加到另一个图像上?
在循环内部或外部使用plot
时,执行时间似乎相同。
循环外的函数plot
# Start the clock
ptm <- proc.time()
# Set up the plot area
plot(10, ann=FALSE, axes=FALSE, asp=1, xlim=c(-1, 1), ylim=c(-1, 1))
# Get the plot information so the image will fill the plot box
lim <- par()
for(i in 1:20) {
rasterImage(img1, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
Sys.sleep(0.1)
rasterImage(img2, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
Sys.sleep(0.1)
}
# Stop the clock
proc.time() - ptm
经过的时间:26.57秒。
循环中的函数plot
# Start the clock
ptm <- proc.time()
for(i in 1:20) {
# Set up the plot area
plot(10, ann=FALSE, axes=FALSE, asp=1, xlim=c(-1, 1), ylim=c(-1, 1))
# Get the plot information so the image will fill the plot box
lim <- par()
rasterImage(img1, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
Sys.sleep(0.1)
# Set up the plot area
plot(10, ann=FALSE, axes=FALSE, asp=1, xlim=c(-1, 1), ylim=c(-1, 1))
# Get the plot information so the image will fill the plot box
lim <- par()
rasterImage(img2, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
Sys.sleep(0.1)
}
# Stop the clock
proc.time() - ptm
经过时间:27.08秒。