Tuesday, July 08, 2008

JMagickで画像の指定した点から円形のバンド状に明るさを変える

JMagickで画像の指定した点から円形のバンド状に明るさを変えるには、以下のコードを実行します。

import java.awt.*;
import magick.*;

public class JMagickTest40
{
public static void main(String args[])
throws MagickException
{
/* 画像の指定した点から円形のバンド状に明るさを変える */
/* 円の中心 */
int cx = 130;
int cy = 160;
/* 半径初期値 */
int ir = 30;
/* 半径増分値 */
int dr = 20;
/* 明るさ */
int il = 100;
/* 明るさ増分値 */
int dl = -10;
/* 繰り返し回数 */
int ct = 8;
/* 読み込み画像名 */
String fn = "sf.jpg";

MagickImage images[] = new MagickImage[ct+1];
images[0] = new MagickImage(new ImageInfo(fn));
int w = (int)images[0].getDimension().getWidth();
int h = (int)images[0].getDimension().getHeight();
int lc = 0;
for(lc=ct;lc>=1;lc--){
MagickImage mi = new MagickImage(new ImageInfo(fn));
/* 円形に切り取るマスクを作成 */
ImageInfo ii = new ImageInfo("xc:none");
ii.setSize(w + "x" + h);
DrawInfo di = new DrawInfo(ii);
di.setFill(PixelPacket.queryColorDatabase("white"));
di.setPrimitive("ellipse " + cx + "," + cy + "," +
ir + "," + ir + ",0,360");
images[lc] = new MagickImage(ii);
images[lc].drawImage(di);
/* マスクを使用して切り取り */
images[lc].compositeImage(CompositeOperator.SrcInCompositeOp,
mi,0,0);
images[lc].modulateImage(il + ",100,100");
ir += dr;
il += dl;
}
images[0].modulateImage(il + ",100,100");
/* すべてのイメージを重ね合わせ */
for(lc=1;lc<=ct;lc++){
images[0].compositeImage(CompositeOperator.SrcOverCompositeOp,
images[lc], 0, 0);
}
images[0].setFileName("sample492a.jpg");
images[0].writeImage(new ImageInfo());
}
}

元画像(sf.jpg)


出力画像(sample492a.jpg)


環境
JDK6 Upadate6(JDK1.6.0_06)/jmagick-win-6.3.9-Q16


関連情報
JMagickまとめ
JMagickで、明度・彩度・色相を変更する

No comments: