ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2013年12月10日火曜日

Javaによる画像入出力プログラム

ちょっとWindowsの画面をキャプチャする機能が欲しくなったんで、調べてみたんですが、、、、いろんな関数があって大変(;゜ロ゜)
手動でやれば簡単なんですが、枚数があるもんですからプログラムと思ったんですけどね。しばし考えて、「Javaにも同じような機能あるんじゃない?」調べたらありました。しかも非常に簡単です。

キャプチャ自体は以下の関数になります。

// 指定領域をキャプチャしてスクリーンショットのBufferedImageを返す createScreenCapture(Rectangle screenRect);

それで簡単に画面の一部(左上の512x512)をファイルに保存するものを作ってみました。

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

public class test {

 /**
  * @param args
  */
 public static void main(String[] args) {

  // スクリーンキャプチャのテスト
  Robot r =null;
  try {
   r = new Robot();
  } catch (Exception e){
   System.out.println("can't get Robot");
  }

  BufferedImage dd = r.createScreenCapture(new Rectangle(0, 0, 512, 512));

  // jpgで保存
  try {
   File savedImage = new File("sss.jpg");
   ImageIO.write(dd, "jpg", savedImage);
  } catch (Exception e) {
   System.out.println("can't write file");
  }

 }

}

このプログラムはファイルを作成するだけですが、読み込むときは以下の通りになります。

BufferedImage img = ImageIO.read(File);

後は、BufferedImageで適当に調べればpixel単位の操作も簡単にできます。


PS:
あ、念のためいっときますが、これはローカルでjavaを動かして自分のPCの画面をキャプチャしたい目的で調べました。(ですからローカルに画像ファイルを保存しちゃってますし)リモートでこれ実行したらどうなるんでしょうねえ?セキュリティにひっかかるかな。(それにBufferedImageデータをどうやって返信するんだという問題がありますが。取得したイメージデータを返信する方法がなければゲームなんかで使えるテクニックなんですが。)

2013年3月2日土曜日

Java 数値フォーマット

これまで特に気にしてませんでしたが、Androidアプリを作ってみると画面が狭いせいで余計、計算結果の出力桁数で困ります。(制限したい)
少し調べてみました。 "String" + "format" + "書式"とかでググればすぐでてきたんで、詳細は書きませんが、例を一つ。

String.format( "%.2f", work); // workという浮動小数点の変数を、小数点以下2桁で文字列に変換

なんとなくCのformatに似てますね。String以外にもformatという書式変換用のメソッドを持っているものはあります。直接数値変換したい場合なんかはそちらを。