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

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

画像の4隅の色を決めてグラデーションを作成するJavaソースコードです。4隅の座標の色から画像の任意座標の色を自動で計算しています。画像の横と縦のピクセル、4隅の色をRGBで指定してPNG画像を作成します。

このソースについての記事はこちら「グラデーション画像(4隅の色)」です。

Gradation4.javaをダウンロード

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

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

public class Gradation4 {
	public static void main( String[] args ) {
		// 変数宣言
		int w, h;		// 画像サイズ
		int r1, g1, b1;	// 左上の色
		int r2, g2, b2;	// 右上の色
		int r3, g3, b3;	// 左下の色
		int r4, g4, b4;	// 右下の色
		String outname;	// 出力ファイル名
		BufferedImage img = null;	// 画像格納クラス

		// 入力した引数が15以上かを調べる
		if ( 15 > args.length ) {
			// 入力した引数が15未満の場合、使用方法を表示する
			System.out.println( 
				"Gradation4 [PNG名][幅][高][R1][G1][B1]…[R4][G4][B4]" );
			return;
		}

		try {
			// 引数を変換し、画像サイズに代入
			w  =  Integer.valueOf( args[  1 ] );
			h  =  Integer.valueOf( args[  2 ] );
			// 引数を変換し、左上の色に代入
			r1 =  Integer.valueOf( args[  3 ] );
			g1 =  Integer.valueOf( args[  4 ] );
			b1 =  Integer.valueOf( args[  5 ] );
			// 引数を変換し、右上の色に代入
			r2 =  Integer.valueOf( args[  6 ] );
			g2 =  Integer.valueOf( args[  7 ] );
			b2 =  Integer.valueOf( args[  8 ] );
			// 引数を変換し、左下の色に代入
			r3 =  Integer.valueOf( args[  9 ] );
			g3 =  Integer.valueOf( args[ 10 ] );
			b3 =  Integer.valueOf( args[ 11 ] );
			// 引数を変換し、右下の色に代入
			r4 =  Integer.valueOf( args[ 12 ] );
			g4 =  Integer.valueOf( args[ 13 ] );
			b4 =  Integer.valueOf( args[ 14 ] );
		}
		catch( NumberFormatException ne )
		{
			System.out.println( "引数が不正です" );
			return;
		}

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

		// 新しい画像を作成
		// 24ビットカラーの画像を作成
		try {
			img = new BufferedImage( w, h,
						 BufferedImage.TYPE_INT_RGB );
		} catch ( Exception e ) {
			// 画像作成に失敗したときの処理
			e.printStackTrace();
			return;
		}

		// グラデーション作成
		int    x, y;
		int    color, rv, gv, bv;	// 計算した色
		double a,b;			// 距離		

		for ( y = 0; y < h; ++ y ) {
			// 距離bを計算
			b = (double)y / (double)( h - 1 );
			for ( x = 0; x < w; ++ x ) {
				// 距離aを計算
				a = (double)x / (double)( w - 1 );

				// 色を計算
				rv = (int)( (double)( r1 - r2 - r3 + r4 ) * a * b
					- (double)( r1 - r2 ) * a
					- (double)( r1 - r3 ) * b + (double)r1 );
				gv = (int)( (double)( g1 - g2 - g3 + g4 ) * a * b
					- (double)( g1 - g2 ) * a
					- (double)( g1 - g3 ) * b + (double)g1 );
				bv = (int)( (double)( b1 - b2 - b3 + b4 ) * a * b
					- (double)( b1 - b2 ) * a
					- (double)( b1 - b3 ) * b + (double)b1 );

				// rv,gv,bvの色を合成
				color = ( rv << 16 ) + ( gv << 8 ) + bv;

				// 合成した色を(x,y)に設定
				img.setRGB( x, y, color );
			}
		}

		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( "正常に終了しました" );
	}
}

このソースについての記事はこちら「グラデーション画像(4隅の色)」です。

 

■新着情報

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

■広告

 

 

 

 

Topへ