dev.copy()导致原始设备的图片消失
时间: 2024-03-09 16:45:16 浏览: 20
dev.copy()函数是用来复制设备上的图片并将其放到剪贴板中。如果原始设备上的图片消失了,很可能是因为剪贴板中的图片已经覆盖了原始设备上的图片。
要避免这种情况,可以在复制之前先将原始设备上的图片保存到一个变量中,然后再调用dev.copy()函数进行复制。如下所示:
```
# 保存原始设备上的图片
img <- dev.cur()
dev.copy(png, "myplot.png")
# 将保存的图片复制到剪贴板中
clipboard <- readClipboard()
writeClipboard(clipboard)
```
这样做可以确保原始设备上的图片不会被覆盖。另外,如果需要在剪贴板中保存多张图片,可以使用不同的名称进行区分。
相关问题
dev.new()和dev.off()怎么组合使用
在 R 中,您可以使用 `dev.new()` 函数创建一个新的图形设备,然后使用 `dev.off()` 函数关闭该设备。通常情况下,您可以按照以下步骤进行操作:
1. 使用 `dev.new()` 函数创建一个新的图形设备,例如:
```
dev.new()
```
这将创建一个新的图形设备,您可以向其中绘制图形。
2. 在新的图形设备中绘制所需的图形。
3. 使用 `dev.off()` 函数关闭图形设备,例如:
```
dev.off()
```
这将关闭当前的图形设备,使您可以创建一个新的图形设备来绘制其他图形。
如果您需要在同一时间绘制多个图形,则可以使用 `dev.new()` 函数创建多个图形设备,并使用 `dev.off()` 函数关闭它们。例如,以下代码将创建两个图形设备,将图形绘制在其中,然后关闭它们:
```
dev.new()
plot(1:10)
dev.off()
dev.new()
plot(10:1)
dev.off()
```
这将创建两个图形设备,第一个设备中绘制了一个从 1 到 10 的简单折线图,第二个设备中绘制了一个从 10 到 1 的简单折线图。
修改这个函数,要实现防止连续点按 while (1) { tp_dev.scan(0); if (tp_dev.sta & TP_PRES_DOWN) { //触摸屏被按下 if (tp_dev.x[0] > 0 && tp_dev.x[0] < 130 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 0 && tp_dev.x[0] < 130 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i < 5) { password[i++] = '1'; } } else if (tp_dev.x[0] > 130 && tp_dev.x[0] < 260 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 130 && tp_dev.x[0] < 260 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i < 5) { password[i++] = '2'; } } else if (tp_dev.x[0] > 260 && tp_dev.x[0] < 390 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 260 && tp_dev.x[0] < 390 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i < 5) { password[i++] ='3'; } } else if (tp_dev.x[0] > 390 && tp_dev.x[0] < 520 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 390 && tp_dev.x[0] < 520 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i < 5) { password[i++] = '4'; } } else if (tp_dev.x[0] > 520 && tp_dev.x[0] < 650 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 520 && tp_dev.x[0] < 650 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i > 0) { password[--i] = '\0'; } } else if (tp_dev.x[0] > 650 && tp_dev.x[0] < 800 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 650 && tp_dev.x[0] < 800 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i == 4) { break; //退出密码输入循环 } else { Show_Hz16(300,250,"提示信息:用户名或密码错误",RED,WHITE); } } //显示部分 LCD_ShowString(400,150,400,24,24,password); } }
while (1) {
tp_dev.scan(0);
if (tp_dev.sta & TP_PRES_DOWN) { //触摸屏被按下
if (tp_dev.x[0] > 0 && tp_dev.x[0] < 130 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) {
if (i < 5) {
password[i++] = '1';
}
while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放
tp_dev.scan(0);
}
} else if (tp_dev.x[0] > 130 && tp_dev.x[0] < 260 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) {
if (i < 5) {
password[i++] = '2';
}
while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放
tp_dev.scan(0);
}
} else if (tp_dev.x[0] > 260 && tp_dev.x[0] < 390 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) {
if (i < 5) {
password[i++] = '3';
}
while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放
tp_dev.scan(0);
}
} else if (tp_dev.x[0] > 390 && tp_dev.x[0] < 520 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) {
if (i < 5) {
password[i++] = '4';
}
while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放
tp_dev.scan(0);
}
} else if (tp_dev.x[0] > 520 && tp_dev.x[0] < 650 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) {
if (i > 0) {
password[--i] = '\0';
}
while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放
tp_dev.scan(0);
}
} else if (tp_dev.x[0] > 650 && tp_dev.x[0] < 800 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) {
if (i == 4) {
break; //退出密码输入循环
} else {
Show_Hz16(300,250,"提示信息:用户名或密码错误",RED,WHITE);
}
while(tp_dev.sta & TP_PRES_DOWN) { //等待触摸屏释放
tp_dev.scan(0);
}
}
//显示部分
LCD_ShowString(400,150,400,24,24,password);
}
}
在每个按键输入后,加入一个 while 循环等待触摸屏释放。这样可以防止连续点按导致密码输入错误。