如何避免多张图片不必要地添加到地块

时间:2015-05-23 00:36:27

标签: r image animation plot

我正在尝试制作一个简单的“动画”。这是我正在使用的代码,它运行得相当好:

# 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秒。

0 个答案:

没有答案