ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示
このページの記事一覧
● 2013年9月29日日曜日 - [Java] Java Image は透過色をサポートしていない?
● 2013年9月2日月曜日 - [Java] Image の拡大
● 2013年7月6日土曜日 - UUID の Version の見分け方
● 2013年6月10日月曜日 - Twitter4J の OAuth 認証を使ってみる
● 2012年9月16日日曜日 - m2e で Eclipse + Maven 環境を作る時に J2SE を指定する
● 2012年9月15日土曜日 - m2e で Eclipse + Maven 環境を作る。の続き

2013年9月29日日曜日

[Java] Java Image は透過色をサポートしていない?

Java7 の ImageIO は PNG の透過色指定をサポートしていないらしい。

package kuro.misc.image;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class TransparentColor {
  private static String FILE_IN = "C:/work/temp/test.png";
  private static String FILE_OUT = "C:/work/temp/test-out.png";

  public static void main(String[] args) throws IOException {
    BufferedImage image = ImageIO.read(new File(FILE_IN));
    ImageIO.write(image, "PNG", new File(FILE_OUT));
  }
}

こんな感じのコードを書いて、透過色指定をした「test.png」を読み込ませると、 出力される「test-out.png」は透過色指定がなくなってしまう。

 BufferedImage image = ImageIO.read(new File(FILE_IN));
System.out.println(
    "Image transparency = " + image.getTransparency());
-----------
Image transparency = 1

getTransparency の出力値の意味は以下の通り。
package java.awt;

public abstract interface Transparency
{
  public static final int OPAQUE = 1;
  public static final int BITMASK = 2;
  public static final int TRANSLUCENT = 3;

  public abstract int getTransparency();
}

読み込んだ時点で 透過情報のあるImageだとは扱われていない模様。

2013年9月2日月曜日

[Java] Image の拡大

Image を拡大して PNG に保存する方法。
PNGに保存するには ImageIO.wtite を使いたいので、 BufferedImage にしておく必要がある。


Image の拡大


いろいろ方法はありそうだが、一番簡単そうなのは java.awt.Image#getScaledInstance を使う方法。
  private static Image magnifyImage(Image img, int scale) {
    int width = img.getWidth();
    int height = img.getHeight();
    Image scaledImage = img.getScaledInstance(
        width * scale, height*scale, Image.SCALE_DEFAULT);
    return scaledImage;
  }


Image から BufferedImage に変換する方法


Image#getScaledInstance を使うと、拡大したイメージは、 java.awt.Image になってしまうので、 ImageIO.write を使うためには、 java.awt.image.BufferedImage に変換する必要がある。
  private static BufferedImage convertImageToBufferedImage(Image img) {
    BufferedImage bimg = new BufferedImage(
        img.getWidth(null), img.getHeight(null),
        BufferedImage.TYPE_INT_ARGB);
    Graphics g = bimg.getGraphics();
    g.drawImage(img, 0, 0, null);
    g.dispose();
    return bimg;
  }

すでに大きさが確定しているイメージを使うので Image.getWidth で Observer を指定する必要はない。


この方法の難点は透過情報(アルファチャンネル)を失ってしまうことだが、 今回は アルファ情報はいらないのでこれで良しとする。

2013年7月6日土曜日

UUID の Version の見分け方

UUID には いくつかのバージョンがあり、生成方法が定められている。
現在定義されているバージョンは以下の5つ。

Version生成方法
1 MAC-Address と 生成時刻によるもの
2 DCE Security version
3 名前(byte列)のMD5 ハッシュによるもの
4 ランダム
5 名前(byte列)の SHA-1 ハッシュによるもの


UUID の形式は以下のようになっている。

xxxxxxxx-xxxx-Vxxx-xxxx-xxxxxxxxxxxx

赤字の「V」のところがバージョン番号。

2013年6月10日月曜日

Twitter4J の OAuth 認証を使ってみる

OAuth を調べてみようとしてとりあえず OAuth 認証をサポートしている Twitter の Java 用ライブラリの Twitter4J を使ってみた。
OAuth の基本的な使い方
  1. 事前のアプリケーション(Consumer)用に サービスプロバイダにアプリケーションを登録して、 アプリケーション用の Consumer Key と Consumer Secret を入手する。
  2. アプリケーションはサービスプロバイダにアクセスして認証用の RequestTokenを入手する。
  3. ResuestToken を引数に Twitter の認証画面を表示する。
  4. RequestToken が認証されたら AccessToken を取得する。
  5. AccessToken を使用して サービスプロバイダの機能を呼び出す。
大体こんな感じだと思う。

2012年9月16日日曜日

m2e で Eclipse + Maven 環境を作る時に J2SE を指定する

これまで、 の両記事で m2e での import の動作についてみてきた。
m2e で pom.xml をインポートする際に、

Build path specifies execution environment J2SE-1.5. 
There are no JREs installed in the workspace that are strictly compatible with this environment.

という警告が出ていたのだが、これは pom.xml に maven-compiler-plugin の configuration を書くことで抑止できる。
やってみる。

2012年9月15日土曜日

m2e で Eclipse + Maven 環境を作る。の続き

前回、m2e で Eclipse + Maven 環境を作成した。
Eclipse に インポートした際に作成される .project や .classpath の中身を確認しておこう。