Javaプログラミング学習サイト ゆるゆるプログラミング

・Javaソースダウンロード(SoftFocus.java)

このソースについての記事はこちら「ぼかし処理」です。

SoftFocus.javaをダウンロード

ダウンロードしたファイルはzip形式です。解凍して使ってください。Windowsの場合、ダウンロードしたzipファイルをマウスの右ボタンでクリックして表示されるポップアップメニューから「すべて展開(T)」で解凍できます。

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

public class SoftFocus {
	public static void main( String[] args ) {
		// 結果格納フラグ
		boolean result;
		// ファイル名
		String inname, outname;
		// 画像格納クラス
		BufferedImage img = null;

		// 入力した引数が2つ以上かを調べる
		if ( 2 > args.length ) {
			// 入力した引数が2つ未満の場合、使用方法を表示する
			System.out.println( "SoftFocus [入力JPEG名]  [出力JPEG名]" );
			return;
		}

		// 入力JPEG名をinnameに代入(拡張子".jpg"省略なし)
		inname  = args[ 0 ];
		// 出力JPEG名をoutnameに代入(拡張子".jpg"省略なし)
		outname = args[ 1 ];

		try {
			// inname(入力JPEG)を読み込んでimgにセット
			img = ImageIO.read( new File( inname ) );
		} catch (Exception e) {
			// inname(入力JPEG)の読み込みに失敗したときの処理
			 e.printStackTrace();
			return;
		}

		// 画像の色の持ち方をチェック
		if ( BufferedImage.TYPE_3BYTE_BGR != img.getType() )
		{
			System.out.println( "対応していないカラーモデルです!("
									 + inname +")" );
			return;
		}

		// ぼかし処理
		int x, y, dx, dy;
		int width, height;
		int color, r, g, b;
		int sumr, sumg, sumb;
		int p;
		int newcolor;
		BufferedImage newimg = null;

		// 画像サイズの取得
		width = img.getWidth();
		height= img.getHeight();

		// 新しい画像を作成
		// 元の画像と同じ状態の24ビットカラー画像を作成
		try {
			newimg = new BufferedImage( width, height, img.getType() );
		} catch ( Exception e ) {
			// 画像作成に失敗したときの処理
			e.printStackTrace();
			return;
		}

		// ぼかし処理
		for ( y = 0; y < height; ++ y ) {
			for ( x = 0; x < width; ++ x ) {
				if ( ( 0 == x ) || ( 0 == y ) ||
					( x == ( width - 1 ) ) || ( y == ( height - 1 ) ) ) {
					// (x,y)が画像の外枠の場合、元の画像の色を取得
					newcolor = img.getRGB( x, y );
				}
				else {
					// 9画素の平均値を計算
					sumr = 0;		// R値の合計
					sumg = 0;	// G値の合計
					sumb = 0;	// B値の合計
					for ( dy = -1; dy <= 1; ++ dy ) {
						for ( dx = -1; dx <= 1; ++ dx ) {
							// (x,y)の色を取得
							color = img.getRGB( x + dx, y + dy );

							// 色をr,g,bに分解
							r = ( color >> 16 ) & 0xff;
							g = ( color >> 8 ) & 0xff;
							b = color & 0xff;
						
							//
							sumr += r;
							sumg += g;
							sumb += b;
						}
					}
					sumr /= 9;	// R値の平均
					sumg /= 9;	// G値の平均
					sumb /= 9;	// B値の平均

					// r,g,bの色を合成
					newcolor = (sumr << 16 ) + ( sumg << 8 ) + sumb;
				}

				// 新しい色を(x,y)に設定
				newimg.setRGB( x, y, newcolor );
			}
		}

		try {
			// imgをoutname(出力JPEG)に保存
			result = ImageIO.write( newimg, "jpeg", new File( outname ) );
		} catch ( Exception e ) {
			// outname(出力JPEG)の保存に失敗したときの処理
			e.printStackTrace();
			return;
		}

		// 正常に終了
		System.out.println( "正常に終了しました" );
	}
}

このソースについての記事はこちら「ぼかし処理」です。

 

■新着情報

2022.07.07 外部プログラムの実行 exeファイル実行
2022.07.06 完全数 6=1+2+3

■広告

 

 

 

 

Topへ