Friday, October 10, 2008

Java2DとJava Image Filters(pixels)を使用して文字列をガラスのように描画する

Java2DとJava Image Filters(pixels)を使用して文字列をガラスのように描画するには、以下のコードを実行します。

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

public class Java2DTest53
{
public static void main(String args[])
throws Exception
{
/* ガラス効果 */
BufferedImage img = ImageIO.read(new File("sf.jpg"));

/* displacementマップの作成 */
BufferedImage img2 = new BufferedImage(
img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB
);
/* 白背景に塗りつぶし後、黒で文字列描画 */
FillFilter ff = new FillFilter(0xffffffff);
img2 = ff.filter(img2, null);
Graphics2D gr = img2.createGraphics();
gr.setColor(new Color(0x00, 0x00, 0x00, 0xff));
gr.setFont(new Font("Tahoma", Font.BOLD, 100));
gr.drawString("SF", 40, 150);
gr.dispose();
/* displacementマップのぼかし */
GaussianFilter gf = new GaussianFilter(4);
img2 = gf.filter(img2, null);

DisplaceFilter df = new DisplaceFilter();
/* displacementマップ設定 */
df.setDisplacementMap(img2);
/* effect量 */
df.setAmount(0.7f);
/* 端の処理 */
df.setEdgeAction(TransformFilter.CLAMP);
BufferedImage img3 = df.filter(img, null);

ImageIO.write(img3, "jpg", new File("sample584a.jpg"));
}
}

元画像(sf.jpg)


出力画像(sample584a.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/

No comments: