Saturday, July 04, 2009

SWFRendererでドーナツ形を描画する

SWFRendererでドーナツ形を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1051a.swf", 200, 200){
donut( cx:100, cy:100, ir:50, or:90,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1051a.swf)


動作環境
groovy 1.6.0, JDK6 update12

Friday, July 03, 2009

Structure Synthで画像の色からランダムな色の立方体を描画する

Structure Synthで画像の色からランダムな色の立方体を描画するには、以下のスクリプトを実行します。

// 色のリスト定義する画像を指定(画像はStructure Synthのディレクトリに置く)
set colorpool image:sf.png
// z軸間隔1.5、x軸間隔1.5で立方体を200*200個描画
1 * { s 0.1 } 200 * { z 1.5 } 200 * { x 1.5 color random } box
// 白色の地面
{ y -1 s 200 0.1 200 color white } box

色リスト定義の元画像(sf.png)


Structure Synthでの出力画像


Sunflowでの出力画像

ImageMagickとPHPでランダムな円を描画する

Imagickでランダムな円を描画するには、以下のコードを実行します。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja"
xml:lang="ja" dir="ltr">
<head>
<title>sample1152(ImageMagick6.5.2)</title>
</head>
<body>
<?php
/* 画像サイズ */
$sw = 200;
$sh = 200;

/* 円の半径 */
$minr = 5;
$maxr = 20;

/* 線の太さ */
$minsw = 3;
$maxsw = 6;

/* 円の数 */
$noc = 30;

/* 円の色 */
$cc = array(
"#7799ff80",
"#ffd02080",
"#ff705080",
"#c0ff9080"
);

$im = new Imagick();
$im->newImage($sw, $sh, "none");
$im->setImageMatte(true);
$idraw = new ImagickDraw();
$idraw->setFillColor("none");
for($lc=0;$lc<$noc;$lc++){
$idraw->setStrokeColor($cc[rand(0,count($cc)-1)]);
$idraw->setStrokeWidth(rand($minsw, $maxsw));
$rad = rand($minr, $maxr);
$idraw->ellipse(rand(0,$sw),rand(0,$sh),
$rad, $rad,0,360);
}
$im->drawImage($idraw);

$im->writeImage('sample1152a.png');

$idraw->destroy();
$im->destroy();
?>
<img src="sample1152a.png" /><br />

</body>
</html>


出力画像(sample1152a.png)
Imagickで描画したランダムな円

SWFRendererでイルカを描画する

SWFRendererでイルカを描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1050a.swf", 200, 200){
dolphinShape( x:0, y:20, width:200, height:160,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1050a.swf)
SWFRendererで描画したイルカ

動作環境
groovy 1.6.0, JDK6 update12

Thursday, July 02, 2009

Structure Synthでランダムな色の立方体を描画する

Structure Synthでランダムな色の立方体を描画するには、以下のスクリプトを実行します。

// 色のリスト定義「:」以降はスペースを入れないこと
set colorpool list:#7799ff,white,#225577
// y軸間隔1.5、z軸間隔1.5、x軸間隔1.5で立方体を3*3*3個描画
3 * { y 1.5 } 3 * { z 1.5 } 3 * { x 1.5 color random } box
// 白色の地面
{ y -1 s 200 0.1 200 color white } box

Structure Synthでの出力画像


Sunflowでの出力画像


関連項目
Structure SynthとSunflowのインストールと連携

JOGLで点線のワイヤーフレームの12面体を描画する

JOGLで点線のワイヤーフレームの12面体を描画するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample14
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -15.0f);

gl.glClear(GL.GL_COLOR_BUFFER_BIT);

// ラインスタイルを設定
gl.glEnable(GL.GL_LINE_STIPPLE);
gl.glLineStipple(2, (short)0x3333);

gl.glPushMatrix();
// X軸回転
gl.glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(10.0f, 0.0f, 1.0f, 0.0f);
// ワイヤフレームで12面体を描画
glut.glutWireDodecahedron();
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1172a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1172a.png)
JOGLで描画した点線のワイヤーフレームの12面体

SWFRendererでCubic curveを描画する

SWFRendererでCubic curveを描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1049a.swf", 200, 200){
cubicCurve( x1: 40, y1:200, ctrlx1:0, ctrly1:50,
ctrlx2:200, ctrly2: 0, x2:160, y2:200,
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1049a.swf)
SWFRendererで描画したcubic curve

動作環境
groovy 1.6.0, JDK6 update12

Wednesday, July 01, 2009

Structure Synthでx, y, z軸方向に繰り返し立方体を描画する

Structure Synthでx, y, z軸方向に繰り返し立方体を描画するには、以下のスクリプトを実行します。

// y軸間隔1.5、z軸間隔1.5、x軸間隔1.5で立方体を3*3*3個描画
3 * { y 1.5 } 3 * { z 1.5 } 3 * { x 1.5 color orange } box
// 白色の地面
{ y -1 s 200 0.1 200 color white } box

Structure Synthの出力画像


Sunflowの出力画像


関連項目
Structure SynthとSunflowのインストールと連携

JOGLでワイヤーフレームの線の太さを指定する

JOGLでワイヤーフレームの線の太さを指定するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample13
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -15.0f);

gl.glClear(GL.GL_COLOR_BUFFER_BIT);
// ワイヤーフレームの線の太さを設定
gl.glLineWidth(4f);

gl.glPushMatrix();
// X軸回転
gl.glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(20.0f, 0.0f, 1.0f, 0.0f);
// ワイヤーフレームで円錐を描画
glut.glutWireCone(2.0f, 3f, 16, 4);
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1171a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1171a.png)
JOGLで線の太さを指定した画像

SWFRendererで十字形を描画する

SWFRendererで十字形を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1048a.swf", 200, 200){
cross( cx: 100, cy: 100, width:20, radius:50,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1048a.swf)
SWFRendererで描画した十字形

動作環境
groovy 1.6.0, JDK6 update12

Tuesday, June 30, 2009

Structure Synthでx, z軸方向に繰り返し立方体を描画する

Structure Synthでx, z軸方向に繰り返し立方体を描画するには、以下のスクリプトを実行します。

// z軸間隔1.5、x軸間隔1.5で立方体を3*3個描画
3 * { z 1.5 } 3 * { x 1.5 color orange } box
// 白色の地面
{ y -1 s 200 0.1 200 color white } box

Structure Synthでの出力画像


Sunflowでの出力画像


関連項目
Structure SynthとSunflowのインストールと連携

ImageMagickとPHPで画像をタイル配置して回転させる

Imagickで画像をタイル配置して回転させるには、以下のコードを実行します。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja"
xml:lang="ja" dir="ltr">
<head>
<title>sample1105(ImageMagick6.5.2)</title>
</head>
<body>
<?php
$im = new Imagick("sf.jpg");
$im->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TILE);
$points = array(0.25, 60);
//$im->distortImage(Imagick::DISTORTION_SCALEROTATETRANSLATE,
// $points, false);
// ScaleRotateTranslateDistortion in distort.h
$im->distortImage(3, $points, false);

$im->writeImage('sample1105a.png');

$im->destroy();
?>
<img src="sample1105a.png" /><br />

</body>
</html>


元画像(sf.jpg)


出力画像(sample1105a.png)
Imagickで回転させてタイル配置した画像

SWFRendererで蝶を描画する

SWFRendererで蝶を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1047a.swf", 200, 200){
butterflyShape( x: 0, y: 0, width: 200, height: 200,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1047a.swf)
SWFRendererで描画した蝶

動作環境
groovy 1.6.0, JDK6 update12

Monday, June 29, 2009

Structure Synthでx軸方向に立方体を繰り返し描画する

Structure Synthでx軸方向に立方体を繰り返し描画するには、以下のスクリプトを実行します。

// x軸間隔1.5で水色っぽい立方体を3個描画
3 * { x 1.5 color #7799ff } box
// 白色の地面
{ y -1 s 200 0.1 200 color white } box

Structure Synthでの出力画像


Sunflowでの出力画像

JOGLでワイヤーフレームの色を指定する

JOGLでワイヤーフレームの色を指定したティーポットを描画するには以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample12
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0xff/(float)0xff,
(float)0xff/(float)0xff,
(float)0xff/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -15.0f);

gl.glClear(GL.GL_COLOR_BUFFER_BIT);
// ワイヤーフレームの色を設定
gl.glColor3f((float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff);

gl.glPushMatrix();
// X軸回転
gl.glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(20.0f, 0.0f, 1.0f, 0.0f);
// ワイヤーフレームでティーポットを描画する
glut.glutWireTeapot(1.5f);
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1170a.png"), width, height, true);
context.release();
context.destroy();
}
}



出力画像(sample1170a.png)
JOGLでワイヤーフレームの色を変えたティーポット

SWFRendererで吹き出しを描画する

SWFRendererで吹き出しを描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

// groovy 1.6.0, JDK6 update12
def gr = new SWFRenderer()
gr.renderToFile("sample1046a.swf", 200, 200){
balloon( x: 80, y: 20, width: 100, height: 100,
fill: color("#bbddff"),
tabLocation: "left",
tabDisplacement: 0.8,
tabHeight: 10,
tabWidth: 10,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}



出力SWF(sample1046a.swf)

Sunday, June 28, 2009

Structure Synthで指定の色の立方体を描画する

Structure Synthで指定の色の立方体を描画するには、以下のスクリプトを実行します。

// 背景色設定
set background #f0f0f0
// 水色っぽい立方体
{ y 0.5 s 2 color #7799ff } box
// 明るい灰色の地面
{ y -1 s 200 0.1 200 color lightgray } box

Structure Synthでの出力画像


Sunflowでの出力画像(Sunflowでは背景色指定は無視される??)

im4javaで画像を点画調に変換する

im4javaで画像を点画調に変換するには、以下のコードを実行します。


import java.util.*;
import org.im4java.core.*;
import org.im4java.process.*;

// im4java-0.98.0-bin.tar.bz2を解凍してim4java-0.98.0.jarはclasspathに通す
public class Im4java28
{
public static void main(String args[])
throws Exception
{
try
{
// ConvertCmd convert = new ConvertCmd();
ImageCommand convert = new WindowsConvertCmd();

IMOperation op = new IMOperation();
op.addImage("sf.jpg");
op.modulate(100.0, 250.0);
op.sketch(0.0, 10.0, 135.0);
op.spread(1);
op.addImage("sample1122a.png");
convert.run(op);
}
catch(CommandException cex)
{
System.out.println(cex.getErrorText());
cex.printStackTrace();
}
}

// im4java 0.98
static class WindowsConvertCmd extends ImageCommand
{
public WindowsConvertCmd()
{
setCommand("cmd");
setCommand("/c");
setCommand("convert");
/* another way
setCommand("C:\\Program Files\\ImageMagick-6.4.9-Q16\\convert");
*/
}
}
}


元画像(sf.jpg)


出力画像(sample1122a.png)
im4javaで点画調に変換した画像

関連情報
im4javaのまとめ

SWFRendererで矢印を描画する

SWFRendererで矢印を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

// groovy 1.6.0, JDK6 update12
def gr = new SWFRenderer()
gr.renderToFile("sample1045a.swf", 200, 200){
arrow( x: 10, y: 10, width: 150, height: 100,
angle:45,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1045a.swf)
SWFRendererで描画した矢印

動作環境
groovy 1.6.0, JDK6 update12

関連項目
groovyで矢印を描画する

Saturday, June 27, 2009

JOGLでワイヤーフレームの球を描画する

JOGLでワイヤーフレームの球を描画するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample8
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);

gl.glClear(GL.GL_COLOR_BUFFER_BIT);

gl.glPushMatrix();
// X軸回転
gl.glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(45.0f, 0.0f, 1.0f, 0.0f);
// ワイヤーフレームで球を描画する
glut.glutWireSphere(1.5f, 32, 32);
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1166a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1166a.png)
JOGLで描画したワイヤーフレームの球

ImageMagickとPHPで画像をRGBチャネル画像に変換する

Imagickで画像をRGBチャネル画像に変換するには、以下のコードを実行します。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja"
xml:lang="ja" dir="ltr">
<head>
<title>sample1129(ImageMagick6.5.2)</title>
</head>
<body>
<?php
/* 中央スペース */
$spx = 10;
$spy = 10;
/* スケール */
$sc = 0.75;

$im = new Imagick("sf.jpg");
$im->resizeImage($im->getImageWidth()*$sc,
$im->getImageHeight()*$sc,
imagick::FILTER_MITCHELL, 1);

$sx = $im->getImageWidth()*2+$spx;
$sy = $im->getImageHeight()*2+$spy;
$im2 = new Imagick();
$im2->newImage($sx, $sy, "black");

// All channel
$im2->compositeImage($im, Imagick::COMPOSITE_OVER,
0, 0, Imagick::CHANNEL_ALL);


// red channel
$imr = $im->fxImage("0", Imagick::CHANNEL_GREEN | Imagick::CHANNEL_BLUE);
$im2->compositeImage($imr, Imagick::COMPOSITE_COPY,
$im->getImageWidth()+$spx, 0, Imagick::CHANNEL_RED);

// green channel
$img = $im->fxImage("0", Imagick::CHANNEL_RED | Imagick::CHANNEL_BLUE);
$im2->compositeImage($img, Imagick::COMPOSITE_OVER,
0, $im->getImageHeight()+$spy, Imagick::CHANNEL_GREEN);

// blue channel
$imb = $im->fxImage("0", Imagick::CHANNEL_RED | Imagick::CHANNEL_GREEN);
$im2->compositeImage($imb, Imagick::COMPOSITE_OVER,
$im->getImageWidth()+$spx, $im->getImageHeight()+$spy,
Imagick::CHANNEL_BLUE);

$im2->writeImage('sample1129a.png');
$im2->destroy();
$im->destroy();
?>
<img src="sample1129a.png" /><br />

</body>
</html>


元画像(sf.jpg)


出力画像(sample1129a.png)
ImagickでRGBチャネルにわけた画像

SWFRendererで文字列を描画する

SWFRendererで文字列を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1044a.swf", 200, 200){
font(new java.awt.Font('MS ゴシック', java.awt.Font.BOLD, 60))
text( x:0, y:70,
text: "日本語",
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}
// SWFRenderer unsupported operation: fontとメッセージがでるが、
// font指定は効いているようみたい。。。



出力SWF(sample1044a.swf)
SWFRendererで描画した文字列

動作環境
groovy 1.6.0, JDK6 update12

関連項目
groovyで日本語を描画する

Friday, June 26, 2009

Structure Synthで線を描画する

Structure Synthで線を描画するには、以下のスクリプトを実行します。

// 直線
line
// x方向に4移動して、線の長さを2倍
{ x 4 s 2 } line
// x方向に8移動して、z軸30度回転
{ x 8 rz 30 } line


出力画像


関連項目
Structure SynthとSunflowのインストールと連携
Structure Synthで立方体を描画する
Structure Synthでワイヤーフレームの立方体を描画する

RMagickで画像を角丸四角パターンで切り取る

RMagickで画像を角丸四角パターンで切り取るには、以下のコードを実行します。


require 'RMagick'
include Magick

images = ImageList.new("sf.jpg")
images.alpha = ActivateAlphaChannel

images2 = ImageList.new
images2.new_image(20, 20){
self.background_color = "none"
}
dr = Draw.new
dr.fill = "white"
dr.roundrectangle(0,0,18,18,4,4);
dr.draw(images2)

images3 = ImageList.new()
images3.new_image(images.columns, images.rows,
TextureFill.new(images2))
images3.alpha = ActivateAlphaChannel
images.composite(images3, CenterGravity, 0, 0,
DstInCompositeOp).write("sample1147a.png")

exit


元画像(sf.jpg)


出力画像
RMagickを使用して角丸四角パターンで切り取った画像

動作環境
ruby1.8.6, rmagick2.9.0

関連項目
ImageMagickで画像を角丸四角タイルパターンで切り取る (convertコマンドでの同様の処理)

SWFRendererでポリラインを描画する

SWFRendererでポリラインを描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

def gr = new SWFRenderer()
gr.renderToFile("sample1043a.swf", 200, 200){
polyline( points: [198,0, 0,100, 198,198],
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1043a.swf)
SWFRendererで描画したポリライン

動作環境
groovy 1.6.0, JDK6 update12

関連項目
groovyでポリラインを描画する

Thursday, June 25, 2009

Structure Synthで球を描画する

Structure Synthで球を描画するには、以下のスクリプトを実行します。

// 球
sphere
// x方向に4移動、グリッドのxyz軸を1.5倍にする
{ x 4 s 1.5 } sphere
// x方向に8移動、グリッドのx,z軸を2倍にする
// のはReferenceに書いてあるように正しく動作しない。
// (楕円がかけない。ver0.9.5時点)
{ x 8 s 2 1 2 } sphere

出力画像
Structure Synthで描画した球

関連項目
Structure SynthとSunflowのインストールと連携

JOGLでワイヤーフレームのドーナツ型を描画する

JOGLでワイヤーフレームのドーナツ型を描画するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample11
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -15.0f);

gl.glClear(GL.GL_COLOR_BUFFER_BIT);

gl.glPushMatrix();
// X軸回転
gl.glRotatef(20.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(45.0f, 0.0f, 1.0f, 0.0f);
// ワイヤーフレームでドーナツを描画する
glut.glutWireTorus(0.5f, 1f, 32, 16);
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1169a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1169a.png)
JOGLで描画したワイヤーフレームのドーナツ型

SWFRendererでポリゴンを描画する

SWFRendererでポリゴンを描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

// groovy 1.6.0, JDK6 update12
def gr = new SWFRenderer()
gr.renderToFile("sample1042a.swf", 200, 200){
polygon( points: [100,0, 0,198, 198,198],
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1042a.swf)
SWFRendererで描画したポリゴン

動作環境
Groovy1.6.0, JDK1.6 Update12

関連項目
groovyでポリゴンを描画する

Wednesday, June 24, 2009

Structure Synthでワイヤーフレームの立方体を描画する

Structure Synthでワイヤーフレームの立方体を描画するには、以下のスクリプトを実行します。

// グリッド
grid
// x方向に4移動、グリッドのxyz軸を1/2倍にする
{ x 4 s 0.5 } grid
// x方向に8移動、グリッドのx,z軸を1/2倍に、y軸を4倍にする
{ x 8 s 0.5 4 0.5 } grid

出力画像

im4javaで画像に枠をつける

im4javaで画像に枠をつけるには、以下のコードを実行します。


import java.util.*;
import org.im4java.core.*;
import org.im4java.process.*;

// im4java-0.98.0-bin.tar.bz2を解凍してim4java-0.98.0.jarはclasspathに通す
public class Im4java27
{
public static void main(String args[])
throws Exception
{
try
{
// ConvertCmd convert = new ConvertCmd();
ImageCommand convert = new WindowsConvertCmd();

IMOperation op = new IMOperation();
op.addImage("sf.jpg");
op.bordercolor("#fbfaf7");
op.border(10,10);
op.bordercolor("#918164");
op.border(5,5);
op.addImage("sample1121a.png");
convert.run(op);
}
catch(CommandException cex)
{
System.out.println(cex.getErrorText());
cex.printStackTrace();
}
}

// im4java 0.98
static class WindowsConvertCmd extends ImageCommand
{
public WindowsConvertCmd()
{
setCommand("cmd");
setCommand("/c");
setCommand("convert");
/* another way
setCommand("C:\\Program Files\\ImageMagick-6.4.9-Q16\\convert");
*/
}
}
}


元画像(sf.jpg)


出力画像(sample1121a.png)
im4javaで枠をつけた画像

関連情報
im4javaのまとめ

ImageMagickで枠をつける (convertコマンドでの同様の処理)

SWFRendererで角丸四角を描画する

SWFRendererで角丸四角を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

// groovy 1.6.0, JDK6 update12
def gr = new SWFRenderer()
gr.renderToFile("sample1041a.swf", 200, 200){
rect( x:10, y:10, width:180, height:180,
arcWidth: 20, arcHeight:20,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力画像(sample1041a.swf)
SWFRendererで描画した角丸四角

関連項目
groovyで角丸四角を描画する (GraphicsRendererでの同様の処理)

Tuesday, June 23, 2009

JOGLでワイヤーフレームのひし形12面体を描画する

JOGLでワイヤーフレームのひし形12面体を描画するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample7
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);

gl.glClear(GL.GL_COLOR_BUFFER_BIT);

gl.glPushMatrix();
// X軸回転
gl.glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(45.0f, 0.0f, 1.0f, 0.0f);
// ワイヤーフレームでひし形12面体を描画
glut.glutWireRhombicDodecahedron();
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1165a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1165a.png)
JOGLで描画したひし形12面体

ImageMagickとPHPで回転させたぼかし四角で画像を切り取る

Imagickで回転させたぼかし四角で画像を切り取るには、以下のコードを実行します。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja"
xml:lang="ja" dir="ltr">
<head>
<title>sample1128(ImageMagick6.5.2)</title>
</head>
<body>
<?php
$im = new Imagick("sf.jpg");
$iw = $im->getImageWidth();
$ih = $im->getImageHeight();
$im2 = new Imagick();
$im2->newImage($iw, $ih, "none");
$im2->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$im2->setImageMatte(true);
$idraw = new ImagickDraw();
$idraw->setFillColor("blue");
$rx = $iw/2;
$ry = $ih/4;
$rw = $iw/2;
$rh = $ih/2;
$idraw->rectangle($rx,$ry,$rx+$rw,$ry+$rh);
$im2->drawImage($idraw);
$args1 = array($rx+$rw/2, $ry+$rh/2, 1, -30);
//$im->distortImage(Imagick::DISTORTION_SCALEROTATETRANSLATE,
// $args1, false);
// ScaleRotateTranslateDistortion in distort.h
$im2->distortImage(3, $args1, false);
$im2->blurImage(0, 10);
$im2->compositeImage($im, Imagick::COMPOSITE_IN, 0, 0,
Imagick::CHANNEL_ALL);
$im2->writeImage('sample1128a.png');
$idraw->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample1128a.png" /><br />

</body>
</html>


元画像(sf.jpg)


出力画像(sample1128a.png)
Imagickで回転させたぼかし四角で切り取った画像
関連項目
ImageMagickとPHPで画像を回転させる - その2

SWFRendererで楕円を描画する

SWFRendererで楕円を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

// groovy 1.6.0, JDK6 update12
def gr = new SWFRenderer()
gr.renderToFile("sample1040a.swf", 200, 200){
ellipse( cx:100, cy:100, radiusx:80, radiusy:40,
fill: new Color(0xbb, 0xdd, 0xff, 0xff),
borderColor: new Color(0x11, 0x33, 0x77, 0xff) )
}


出力SWF(sample1040a.swf)
SWFRendererで描画した楕円

動作環境
Groovy1.6.0, JDK1.6 Update12

Monday, June 22, 2009

Structure Synthで立方体を描画する

Structure Synthで立方体を描画するには、以下のスクリプトを実行します。

// 立方体
box
// x方向に4移動、立方体のxyz軸を2倍にする
{ x 4 s 2 } box
// x方向に8移動、立方体のx,z軸を2倍に、y軸を0.1倍にする
{ x 8 s 2 0.1 2 } box

出力画像


関連項目
Structure SynthとSunflowのインストールと連携

JOGLでワイヤーフレームの4面体を描画する

JOGLでワイヤーフレームの4面体を描画するには、以下のコードを実行します。


import java.io.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*;

public class JoglSample10
{
// 出力画像サイズ
private static int width = 300;
private static int height = 300;

public static void main(String args[])
throws IOException
{
GLDrawableFactory gldf =
GLDrawableFactory.getFactory();
GLCapabilities glc = new GLCapabilities();
glc.setDoubleBuffered(false);
GLPbuffer buf = gldf.createGLPbuffer(
glc, null, width, height, null);

buf.addGLEventListener(
new GLEventListener(){
// 初期化
public void init(GLAutoDrawable dr)
{
GL gl = dr.getGL();
// 背景色
gl.glClearColor(
(float)0x77/(float)0xff,
(float)0x99/(float)0xff,
(float)0xff/(float)0xff,
1f);
}

public void display(GLAutoDrawable dr)
{
GL gl = dr.getGL();
GLUT glut = new GLUT();
gl.glViewport(0, 0, width, height);

// 透視投影
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float)height/(float)width;
gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
5.0f, 40.0f);

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);

gl.glClear(GL.GL_COLOR_BUFFER_BIT);

gl.glPushMatrix();
// X軸回転
gl.glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
// Y軸回転
gl.glRotatef(30.0f, 0.0f, 1.0f, 0.0f);
// ワイヤーフレームで4面体を描画する
glut.glutWireTetrahedron();
gl.glPopMatrix();
}

public void reshape(
GLAutoDrawable dr,
int x, int y,
int width, int height){}

public void displayChanged(
GLAutoDrawable dr,
boolean modeChanged,
boolean deviceChanged){}
}
);

GLContext context = buf.createContext(null);
context.makeCurrent();
buf.display();
Screenshot.writeToFile(
new File("sample1168a.png"), width, height, true);
context.release();
context.destroy();
}
}


出力画像(sample1168a.png)
JOGLで描画したワイヤーフレームの4面体

動作環境
JDK6 Upadate13, JOGL 1.1.1

SWFRendererで線を描画する

SWFRendererで線を描画するには、以下のコードを実行します。


import java.awt.*
import groovy.swing.j2d.swf.*

// groovy 1.6.0, JDK6 update12
def gr = new SWFRenderer()
gr.renderToFile("sample1039a.swf", 200, 200){
line( x1:0, y1:0, x2: 200, y2:200,
borderColor: new Color(0x11, 0x33, 0x77, 0xff),
borderWidth: 10 )
// bug? borderWidthが効かないみたい。。
}


出力SWF(sample1039a.swf)
SWFRendererで描画した線

動作環境
Groovy1.6.0, JDK1.6 Update12