Saturday, February 27, 2010

Java2DとJava Image Filters(pixels)を使用して画像をグレースケールに変換する

Java2DとJava Image Filters(pixels)を使用して画像をグレースケールに変換するには、以下のコードを実行します。


import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import com.jhlabs.image.*;

public class Java2DTest63
{
public static void main(String args[])
throws Exception
{
/* 画像をグレースケールに変換する */
BufferedImage img = ImageIO.read(new File("sf2.jpg"));
GrayscaleFilter gf = new GrayscaleFilter();

BufferedImage img2 = gf.filter(img, null);
ImageIO.write(img2, "jpg", new File("sample1964a.jpg"));
}
}


元画像(sf2.jpg)


出力画像(sample1964a.jpg)


関連項目
Jerry Huxtableさんのホームページ
http://www.jhlabs.com/index.html
Java Image Filtersのページ
http://www.jhlabs.com/ip/filters/
java.net でのプロジェクトページ
https://pixels.dev.java.net/

Friday, February 26, 2010

Java2DとJava Image Filters(pixels)を使用して画像を絵画っぽく変換する

Java2DとJava Image Filters(pixels)を使用して画像を絵画っぽく変換するには、以下のコードを実行します。


import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import com.jhlabs.image.*;

public class Java2DTest62
{
public static void main(String args[])
throws Exception
{
/* 画像を絵画っぽく変換する */
BufferedImage img = ImageIO.read(new File("sf2.jpg"));
DiffuseFilter df = new DiffuseFilter();
/* スケール */
df.setScale(3);

OilFilter of = new OilFilter();
/* ピクセルでの効果範囲 */
of.setRange(2);
/* 効果のレベル */
of.setLevels(3);

// 複合フィルタ
CompoundFilter cf = new CompoundFilter(of, df);

BufferedImage img2 = cf.filter(img, null);
ImageIO.write(img2, "jpg", new File("sample1963a.jpg"));
}
}


元画像(sf2.jpg)


出力画像(sample1963a.jpg)


関連項目
Jerry Huxtableさんのホームページ
http://www.jhlabs.com/index.html
Java Image Filtersのページ
http://www.jhlabs.com/ip/filters/
java.net でのプロジェクトページ
https://pixels.dev.java.net/

Thursday, February 25, 2010

processingtとJava Image Filters(pixels)で画像が水面のようにゆらめくアニメーションを表示する

processingとJava Image Filters(pixels)で画像が水面のようにゆらめくアニメーションを表示するには、以下のコードを実行します。Java Image Filtersはhttps://pixels.dev.java.net/servlets/ProjectDocumentListから pixels-core-2.1.3-SNAPSHOT.jarをダウンロードしてSketchのフォルダのcodeサブフォルダに配置するか、 Sketch->Add FilesメニューからSketchに追加します。


PImage img;
SwimFilter sf;
void setup(){
// キャンバスサイズ
img = loadImage("sf2.jpg");
size(img.width, img.height);
// 水面のようなゆらぎ効果をつける
sf = new SwimFilter();
// 効果の量
sf.setAmount(5f);
// スケール
sf.setScale(32f);
// 引き伸ばし
sf.setStretch(5f);
// アングル
sf.setAngle(10f/180f*ImageMath.PI);
// 乱れ
sf.setTurbulence(1f);
}
void draw(){
// 時間
sf.setTime(frameCount/10f);
PImage img2 = new PImage(sf.filter((BufferedImage)img.getImage(), null));
image(img2, 0, 0);
}


元画像(sf2.jpg)


出力画像


動作環境
processing 1.0.9

〇関連項目
・Processingをインストールした仮想マシンを構築するには、以下のページを参照してください。
https://serverarekore.blogspot.com/search/label/Processing

Processing とJava Image Filters(pixels)を使用して画像に水面のようなゆらぎ効果をつける

・Processingに関する他の記事は、こちらを参照してください。

Wednesday, February 24, 2010

processingで3ds形式のモデルを読み込んで表示する

processingで3ds形式のモデルを読み込んで表示するには、以下のコードを実行します。3ds形式のモデルを読み込むには、MRI3DSを使用します。mri3ds.jarをcodeサブディレクトリに配置するか、Sketch->Add FilesメニューからSketchに追加します。

MRI3DSのサイト
http://www.pixelnerve.com/processing/libraries/mri3ds/


import com.sun.opengl.util.*;
import javax.media.opengl.*;
import processing.opengl.*;
import mri.*;

V3dsScene vscene;
GL gl;
void setup()
{
size(400, 300, OPENGL);
ambientLight(255, 255, 255, 0, 50, -400);
gl = ((PGraphicsOpenGL)g).beginGL();
gl.glClearColor(0.0, 0.0, 0.0, 0.0);
vscene = new V3dsScene( this, "STS.3ds" );
}

void draw()
{
gl=((PGraphicsOpenGL)g).beginGL();
gl.glEnable(GL.GL_LIGHTING);
gl.glEnable(GL.GL_LIGHT0);
gl.glDisable(GL.GL_CULL_FACE);
gl.glEnable(GL.GL_NORMALIZE);
gl.glEnable(gl.GL_COLOR_MATERIAL);
gl.glClear(GL.GL_COLOR_BUFFER_BIT |GL.GL_DEPTH_BUFFER_BIT );
((PGraphicsOpenGL)g).endGL();
translate(200, 150, 0);
scale(20, 20, 20);
rotateY(2*PI*frameCount/360);
rotateX(2*PI*frameCount/360/10);
vscene.draw();
}


出力画像


関連情報
モデルデータ
http://www.nasa.gov/multimedia/3d_resources/assets/sts.html

動作環境
processing 1.0.9

〇関連項目
・Processingをインストールした仮想マシンを構築するには、以下のページを参照してください。
https://serverarekore.blogspot.com/search/label/Processing

・Processingに関する他の記事は、こちらを参照してください。

Tuesday, February 23, 2010

processingでフォグを使用する

processingでフォグを使用するには、以下のコードを実行します。


import com.sun.opengl.util.*;
import javax.media.opengl.*; 
import processing.opengl.*;
GL gl;
GLUT glut;
void setup()
{
  size(400, 300, OPENGL);
  ambientLight(128, 128, 128, 0, 0, 300);
//  lights();

  gl = ((PGraphicsOpenGL)g).beginGL();
  glut = new GLUT();
  gl.glClearColor(0.0, 0.0, 0.0, 0.0);
}

void draw()
{
  gl=((PGraphicsOpenGL)g).beginGL();
  gl.glEnable(GL.GL_LIGHTING);
  gl.glEnable(GL.GL_LIGHT0);
  gl.glEnable(GL.GL_CULL_FACE);
  gl.glEnable(GL.GL_NORMALIZE);
  // フォグの設定
  float fog[]={0.1f,0.1f,0.1f,1.0f};
  gl.glFogfv(GL.GL_FOG_COLOR,fog,0);
  gl.glFogi(GL.GL_FOG_MODE,GL.GL_EXP);
  gl.glFogf(GL.GL_FOG_DENSITY, 0.003f);
  gl.glFogf(GL.GL_FOG_START, 0.0f);
  gl.glFogf(GL.GL_FOG_END,800.0f);
  gl.glEnable(GL.GL_FOG);

  gl.glClear(GL.GL_COLOR_BUFFER_BIT |GL.GL_DEPTH_BUFFER_BIT );

  gl.glTranslatef(width/2, height/2+50, -50);
  gl.glPushMatrix();

  gl.glRotatef(-45f, 1.0f, 0.0f, 0.0f);
//  gl.glRotatef(frameCount*3, 0.0f, 1.0f, 0.0f);
  gl.glTranslatef(-120, 0, -480);
  // 面の色を設定
  gl.glColor3f(
    (float)0x77/(float)0xff, 
    (float)0x99/(float)0xff, 
    (float)0xff/(float)0xff
  );
  // 球を描画
  for(int lz=0;lz<20;lz++){
    for(int lx=0;lx<10;lx++){
      gl.glPushMatrix();
      gl.glTranslatef(lx*30, 0, lz*30);
      glut.glutSolidSphere(10f, 16, 16);
      gl.glPopMatrix();
    }
  }
  gl.glPopMatrix();
  ((PGraphicsOpenGL)g).endGL();
}


出力画像


動作環境
processing 1.0.9

〇関連項目
・Processingをインストールした仮想マシンを構築するには、以下のページを参照してください。
https://serverarekore.blogspot.com/search/label/Processing

・Processingに関する他の記事は、こちらを参照してください。

Monday, February 22, 2010

processingとJava Image Filters(pixels)を使用して地形っぽい画像を生成する

processingとJava Image Filters(pixels)を使用して地形っぽい画像を生成するには、以下のコードを実行します。Java Image Filtersはhttps://pixels.dev.java.net/servlets/ProjectDocumentListから pixels-core-2.1.3-SNAPSHOT.jarをダウンロードしてSketchのフォルダのcodeサブフォルダに配置するか、 Sketch->Add FilesメニューからSketchに追加します。


import processing.opengl.*;

PImage img2;
int ix = 200;
int iy = 200;

void setup()
{
// キャンバスサイズ
size(400, 300, OPENGL);
PImage img = new PImage(ix, iy);
// プラズマ画像を生成する
PlasmaFilter pf = new PlasmaFilter();
// 乱れを設定する(0-10)
pf.setTurbulence(1.2f);
// seed設定
//pf.setSeed(1318);
img2 = new PImage(pf.filter((BufferedImage)img.getImage(), null));
img2.loadPixels();
}

void draw()
{
background(0);
lights();
ambientLight(128, 128, 128, 0, -1000, 300);
translate(width/2, height/2);
rotateX(radians(-30));
rotateY(radians(frameCount));
noStroke();
float ox = -400;
float oy = -100;
float oz = -400;
int us = 10;
for(int lx=0;lx<ix-1;lx++){
for(int lz=0;lz<iy-1;lz++){

beginShape(TRIANGLES);
float cx = (lx+0.5)*us;
float cz = (lz+0.5)*us;
float cy = (red(img2.pixels[lz*ix+lx]) +
red(img2.pixels[lz*ix+(lx+1)]) +
red(img2.pixels[(lz+1)*ix+(lx+1)]) +
red(img2.pixels[(lz+1)*ix+lx]) )/4;
//println(cy);
if( cy < 60 ){
fill(color(#dddddd));
} else if( cy < 100 ){
fill(color(#22aa55));
} else if( cy < 130 ){
fill(color(#777733));
} else {
fill(color(#224477));
}
vertex(ox+lx*us, oy+red(img2.pixels[lz*ix+lx]), oz+lz*us);
vertex(ox+(lx+1)*us, oy+red(img2.pixels[lz*ix+(lx+1)]), oz+lz*us);
vertex(ox+cx, oy+cy, oz+cz);

vertex(ox+(lx+1)*us, oy+red(img2.pixels[lz*ix+(lx+1)]), oz+lz*us);
vertex(ox+cx, oy+cy, oz+cz);
vertex(ox+(lx+1)*us, oy+red(img2.pixels[(lz+1)*ix+(lx+1)]), oz+(lz+1)*us);

vertex(ox+(lx+1)*us, oy+red(img2.pixels[(lz+1)*ix+(lx+1)]), oz+(lz+1)*us);
vertex(ox+cx, oy+cy, oz+cz);
vertex(ox+lx*us, oy+red(img2.pixels[(lz+1)*ix+lx]), oz+(lz+1)*us);

vertex(ox+lx*us, oy+red(img2.pixels[(lz+1)*ix+lx]), oz+(lz+1)*us);
vertex(ox+cx, oy+cy, oz+cz);
vertex(ox+lx*us, oy+red(img2.pixels[lz*ix+lx]), oz+lz*us);

endShape();
}
}
}


出力画像


動作環境
processing 1.0.9

〇関連項目
・Processingをインストールした仮想マシンを構築するには、以下のページを参照してください。
https://serverarekore.blogspot.com/search/label/Processing

・Processingに関する他の記事は、こちらを参照してください。

Sunday, February 21, 2010

processingとJava Image Filters(pixels)を使用して万華鏡のような画像が動くアニメーションを表示する

processingとJava Image Filters(pixels)を使用して万華鏡のような画像が動くアニメーションを表示するには、以下のコードを実行します。Java Image Filtersはhttps://pixels.dev.java.net/servlets/ProjectDocumentListから pixels-core-2.1.3-SNAPSHOT.jarをダウンロードしてSketchのフォルダのcodeサブフォルダに配置するか、 Sketch->Add FilesメニューからSketchに追加します。


// キャンバスサイズ
int rad = 0;
PImage img;
KaleidoscopeFilter kf;

void setup(){
img = loadImage("sf2.jpg");
size(img.width, img.height);
// 万華鏡のような画像を生成する
kf = new KaleidoscopeFilter();
// 面数
kf.setSides(6);
// 角度1
kf.setAngle(20f/180f*ImageMath.PI);
// 角度2
kf.setAngle2(50f/180f*ImageMath.PI);
// 半径
kf.setRadius(100);
}

void draw(){
// 中心X
kf.setCentreX(0.5f+0.15*cos(2*PI*rad/360));
// 中心Y
kf.setCentreY(0.5f+0.10*sin(2*PI*rad/360));

PImage img2 = new PImage(kf.filter((BufferedImage)img.getImage(), null));
image(img2, 0, 0);
rad+=6;
}


元画像(sf2.jpg)


出力画像


動作環境
processing 1.0.9
〇関連項目
・Processingをインストールした仮想マシンを構築するには、以下のページを参照してください。
https://serverarekore.blogspot.com/search/label/Processing
Processing とJava Image Filters(pixels)を使用して万華鏡のような画像を作成する
・Processingに関する他の記事は、こちらを参照してください。