【问题标题】:Analyzing a large array quickly快速分析大型阵列
【发布时间】:2023-03-05 12:48:01
【问题描述】:

所以,我想快速分析屏幕上每个像素的颜色。为此,我在双嵌套 for 循环中使用Robot.getPixelColor(i, j),其中i 是我的屏幕宽度,j 是我的屏幕高度。当然,这需要很长时间,因为我有一个 1080 屏幕。关于如何加快进程的任何建议?现在大约需要一个小时,我需要大约 5 秒。或者这是不可能的?提前致谢!!

【问题讨论】:

  • 你是怎么分析的?请问代码?
  • 您对一个像素的分析是否依赖于任何其他像素?
  • 这取决于你想要做什么样的分析。您可以截取屏幕截图,缩小其大小,然后对这个较小的图像进行分析。
  • 基本上,我将打开一个 Minecraft 窗口,我想检查屏幕上是否有一棵树,就好像有人在看它一样。我打算用屏幕上的像素来分析一棵树的颜色。
  • 我认为我要做的是每隔 50 个左右像素检查一次,而不是每个像素。

标签: java arrays performance


【解决方案1】:

机器人很适合获取大图,也可能适合单个像素

至于你得到图像的所有像素 - 我得到了大约 50 倍的加速。

  long tm=System.currentTimeMillis();
int i;
Toolkit it=Toolkit.getDefaultToolkit();
  Dimension d=it.getScreenSize();
  int w=(int)d.getWidth(), h=(int)d.getHeight();
  Rectangle rect=new Rectangle(0, 0, w, h);
  Robot r=null;
  try {
    r=new Robot();
  }
  catch(AWTException awte){ };
  BufferedImage ib=r.createScreenCapture(rect);
  int[] pix=ib.getRGB(0, 0, w, h, null, 0, w);
  for(i=0; i<pix.length; i++) pix[i]=pix[i]&0x00ffffff;
      System.out.println("t1 "+(System.currentTimeMillis()-tm));
       tm=System.currentTimeMillis();
  for(i=0; i<pix.length; i++) r.getPixelColor(i%w, i/w);
      System.out.println("t2 "+(System.currentTimeMillis()-tm));

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 2017-04-21
    • 2020-09-24
    • 2018-12-09
    • 2015-09-03
    • 1970-01-01
    • 2013-09-08
    • 2018-05-05
    • 2020-01-30
    相关资源
    最近更新 更多