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 を指定する必要はない。


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

0 件のコメント:

コメントを投稿