tech memorandom

Webに関して調査したことや、メディアアート系(Max,Processing)で調査したことなどを書いていきます。

Processing サブディスプレイでフルスクリーンする方法

別blogからの移転記事です。

 

ProcessingはJavaを描画に特化したような言語でちょっとプログラムかける人にとってはとても使いやすいメディアアートのツールです。MaxやJitterもオブジェクトをパッチすることで表現することができる素晴らしいツールなのですが、演算処理やデータ処理を書こうと思うと途端にややこしくなります。オブジェクトをJSやJavaで書くこともできるのですが、inlet,outlet,bang周りがどうも扱いづらくてあまり使う気になれませんでした。

 

ただProcessingでVJのような映像やろうとした場合、サブディスプレイでフルスクリーンをすることができない、という他の映像ソフトではちょっと考えられない欠点があります。


Processingでサブディスプレイにフルスクリーンで表示する方法を調査してみした。

ProcessingはJavaをラッパーしたようなものなので、Javaのawtパッケージを使うことでなんとかなりました。

(本当はこういった仕組みをprocessingにいれてほしいのですが・・・)

 

ひとまず動いたので共有します。

だいぶ前の記事なので動かなかった本当ごめんなさい。

 

import java.awt.*;

Rectangle monitor = new Rectangle();
boolean bSubdisplay = true;

void setup() { 
  GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
  GraphicsDevice gs = ge.getScreenDevices();  
  GraphicsDevice gd = gs[0];
  
  //サブディスプレイがある場合は上書き
  if (gs.length == 2 && bSubdisplay)
  {
    gd = gs[1];
  }
  
  GraphicsConfiguration gc = gd.getConfigurations();
  monitor = gc[0].getBounds();

  println(monitor.x + " " + monitor.y + " " + monitor.width + " " + monitor.height);
  size(monitor.width, monitor.height);
  background(0);
}

void draw() {
  frame.setLocation(monitor.x, monitor.y);
  frame.setAlwaysOnTop(true); 
  stroke(255);
  line(0,0,width,height);
}  

public void init() {
  frame.removeNotify();
  frame.setUndecorated(true);
  super.init();
}