首页 > 解决方案 > 如何在 Java Processing 3.x 中获取图像前面的对象?

问题描述

嗨,我遇到了一个问题,我无法将椭圆放在地图上。相反,会发生椭圆加载一秒钟,然后地图在此之后继续加载。我已经添加了下面的代码,看看是否有人可以提供帮助?

PImage map; 
float zoom = 1;
float posX = 0;
float posY = 0;

void setup() {
  size (800, 800, P3D);
  loadData();
  map = loadImage("uk-admin.jpg");
 
}

void draw () {
 background (0);
 translate(posX,posY);
 scale(zoom);
 image(map, 0,0, width, height);
 camera(width/2, height/2, (height/2) / tan(PI*30.0 / 180.0),width/2.0, height/2.0 , 0, 0, 1, 0);
}

Table table;

void loadData() {
  table = loadTable("data.csv", "header");

  for (int i = 0; i < table.getRowCount(); i++) {
    TableRow row = table.getRow(i);

    String city = row.getString("City");
    int year1991 = row.getInt("1991");
    int year2001 = row.getInt("2001");
    int year2011 = row.getInt("2011");
    float lat = row.getFloat("latitude");
    float lon =  row.getFloat("longitude");
    
     lat = map(lat, 90.0, -90.0, 0, height);
     lon = map(lon, -180.0, 180.0, 0, width);
     fill(255);                      
     stroke(10);
     ellipse(lon, lat, 30, 30);
   
   
}}


标签: javaimage-processingprocessing

解决方案


您需要loadData()draw()循环中调用。现在发生的情况是,您正在为第一帧绘制椭圆,然后在之后的每一帧都在其顶部绘制图像。

在处理中,setup()块运行一次,然后显示画布的当前状态,然后draw()运行块,然后显示画布draw(),然后显示,以此类推。因此,当您在 中绘制一个椭圆(或一堆椭圆)setup(),然后在该椭圆上绘制一些东西时draw(),它仅显示第一帧的椭圆。


推荐阅读