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

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

できるだけ隙間が少なくなるように円を並べた模様の画像を作成するJavaのソースコードです。

このソースについての記事はこちら「円模様2」です。

Pattern_Circle02.javaをダウンロード

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

import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import java.awt.Color;
import java.awt.BasicStroke;
import java.io.File;
import javax.imageio.ImageIO;

public class Pattern_Circle02 {
	public static void main(String[] args) {
		// 変数宣言
		int w, h;			// 画像サイズ
		int radius;			// 円の半径
		int line_w;			// 線幅
		String outname;			// 出力ファイル名
		BufferedImage img = null;	// 画像格納クラス

		// 入力した引数が5以上かを調べる
		if ( 5 > args.length ) {
			// 入力した引数が5未満の場合、使用方法を表示する
			System.out.println( 
				"Pattern_Circle02 [PNG名] [画像幅] [画像高] [円半径] [線幅]" );
			return;
		}

		try {
			// 引数を変換し、画像の幅と高さをwとhに代入
			w =  Integer.valueOf( args[ 1 ] );
			h =  Integer.valueOf( args[ 2 ] );

			// 引数を変換し、円の半径radiusに代入
			radius = Integer.valueOf( args[ 3 ] );
			if ( 1 > radius ) {
				System.out.println( "円の半径に1以上を指定!" );
				return;
			}

			// 引数を変換し、線幅line_wに代入
			line_w = Integer.valueOf( args[ 4 ] );
			if ( 1 > line_w ) {
				System.out.println( "線幅に1以上を指定!" );
				return;
			}
		}
		catch( NumberFormatException ne )
		{
			System.out.println( "引数が不正です" );
			return;
		}
		// 出力PNG名をoutnameに代入(拡張子".png"省略なし)
		outname = args[ 0 ];

		// 新規画像を作成
		img = new BufferedImage( w, h, BufferedImage.TYPE_INT_RGB );
		Graphics2D g = (Graphics2D)img.getGraphics();
		g.setColor( Color.white );	// 背景色を白に設定
		g.fillRect( 0, 0, w, h );	// 背景で画像全体を塗る

		// 模様を作成
		int x, y;
		int row;
		int start_x;
		int pitch_x, pitch_y;

		// xとyの間隔を代入
		pitch_x = radius * 2;
		pitch_y = (int)( (double)radius * Math.sqrt( 3.0 ) );

		// 線の色を黒に設定
		g.setColor( Color.black );
		// 線幅をline_wに設定
		g.setStroke( new BasicStroke( line_w ) );

		// 円模様の描画
		row = 0;
		for ( y = 0; y <= ( h + radius ); y = y + pitch_y ) {
			++ row;
			if ( 1 == ( row % 2 ) )
				start_x = 0;
			else
				start_x = -radius;
			//
			for ( x = start_x; x <= ( w + radius ); x = x + pitch_x ) {
				g.drawOval( x - radius, y - radius, radius * 2, radius * 2 );
			}
		}


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

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

このソースについての記事はこちら「円模様2」です。

 

■新着情報

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

■広告

 

 

 

 

Topへ