0

こんにちは、解像度を指定してより高品質の画像を取得できるように、シミュレーションのスクリーンショットを撮る良い方法を知っている人はいますか? 私が考えることができる唯一の方法は、ズームインして複数の画像をつなぎ合わせることですが、時間がかかります...

更新:
エリア全体を正常にエクスポートできました。魔法のパラメーターは次のとおりです。.setAnimationParameterEnabled(Panel.ANIM_BOUNDS_CLIPPING_XJAL, false)

表示領域だけでなく、Anylogic に領域全体を強制的に描画させます。
しかし、常にうまくいくとは限りません。コードを実行し、エリア内を移動し、ズームイン/ズームアウトして、再試行する必要があります。おそらくすべてのものを描画し始めたために、ある時点で本当にグリッチが発生し、コードが機能します。問題は、それを機能させるために何をすべきかを正確に理解できないことです...

   java.awt.Component alPanel = getExperiment().getPresentation().getPanel();
getExperiment().getPresentation().getPanel().setAnimationParameterEnabled(Panel.ANIM_BOUNDS_CLIPPING_XJAL, false);
getExperiment().getPresentation().setMaximized(false);
getExperiment().getPresentation().setPanelSize(5000, 5000);
java.awt.image.BufferedImage imageExperiment = new java.awt.image.BufferedImage(
    alPanel.getWidth(),
    alPanel.getHeight(),
    java.awt.image.BufferedImage.TYPE_INT_RGB
);

getExperiment().drawPresentation(getExperiment().getPresentation().getPanel(), imageExperiment.createGraphics(), false);
java.awt.Component component = getExperiment().getPresentation().getPanel();

  // call the Component's paint method, using
  // the Graphics object of the image.
  component.paintAll( imageExperiment.getGraphics() ); // alternately use .printAll(..)

try {
    // write the image as a PNG
    javax.imageio.ImageIO.write(
      imageExperiment,
      "png",
      new File("screenshotAnylogic.png"));
} catch(Exception e) {
    e.printStackTrace();
}
4

2 に答える 2

0

まあ、Anylogicにはそのための組み込みメソッドはありません.Javaを使ってそれを実現することもできます。経由でシミュレーションを含むパネルを取得するgetExperiment().getPresentation().getPanel()ことができ、そこから画像を作成できます。これは、たとえばここで説明されており、コードは次のようになります。

public static BufferedImage getScreenShot(Component component)
{
  BufferedImage image = new BufferedImage(
  component.getWidth(),
  component.getHeight(),
  BufferedImage.TYPE_INT_RGB
  );
  // call the Component's paint method, using
  // the Graphics object of the image.
  component.paint( image.getGraphics() ); // alternately use .printAll(..)
  return image;
}

public static void saveComponentScreenshot(Component component)
{
  try {
      // write the image as a PNG
      ImageIO.write(
        getScreenShot(component),
        "png",
        new File("screenshot.png"));
    } catch(Exception e) {
      e.printStackTrace();
    }
}

残念ながら、これではおそらく必要な大きなビューポートが得られません。getExperiment()public final void drawPresentation(Panel panel, java.awt.Graphics2D g, boolean publicOnly)から返された Experiment オブジェクトから利用できるメソッドは、必要な寸法でカスタム Panel にシミュレーションを描画するのに役立つ可能性があります。かなりハッキーですが、私が思いつくことができるのはそれだけです^^

于 2015-05-11T21:20:24.657 に答える