(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Java】スクリーンショット画像に映り込むタスクバー部分をプログラムでトリミングする

スポンサーリンク

はじめに

スクリーンショットを画面全体で撮った際、Windowsの場合はタスクバーが映り込んでしまいます。
そのようなタスクバーのエリアをプログラムにて切り出すをJavaプログラムで実装しました。

環境情報
  • Eclipse Version: 2.3
  • JavaSE 11

方針

基本的な方針は以下プログラムの通りです。

全ピクセルを走査しながら、範囲外の部分は出力しないようにします。

あとはタスクバーを切り出す範囲をペイントアプリで確認します。今回は1020ピクセルより下がタスクバー領域でした。

f:id:mtiit:20201124111257p:plain
カーソルを合わせるとピクセル位置が表示される

サンプルコード

上記リンク先にもある通り以下にて元画像のサイズが取得できます。ペイントで左下に表示される数値と同じで、上の例でいうとwが1920でhが1080です。

BufferedImage read = null;
read = ImageIO.read(f);
int w = read.getWidth();
int h = read.getHeight();

そして以下にて出力用のファイルを生成します。

BufferedImage write = new BufferedImage(m+1,n+1, BufferedImage.TYPE_INT_RGB);

ここで値を入れているサイズですが、ペイントで確認した1020ピクセルより下は不要のため以下のように値を定義して

int m=1920;
int n=1020;


あとは該当領域のみを切り出すために以下のように条件外はピクセルを書き込まないようにします。

for(int y=0;y<h;y++){
 for(int x=0;x<w;x++){
  if(y<=n){
   if(x<=m){
    write.setRGB(x-a,y-b,read.getRGB(x, y));
}}}}

最後にカレントディレクトリにファイルを出力します。

File fo = new File("test.png");
ImageIO.write(write, "png", fo);

Eclipseであれば下記のように同フォルダの中にファイルができます。

f:id:mtiit:20201124114657p:plain
タスクバーが切り取られた画像が出力

終わりに

スクリーンショット全体のサイズとタスクバーのサイズは使用している端末によって異なっていますが、一度確認すれば他の画像も同じとなるので一括処理等で利用できます。

以上、ご参考になれば幸いです。