2017/08/27 公開
・テーブルによる色変換 その2
ここでは、色変換テーブルを使った色変換のJavaソースコードのテーブル設定部分を上から順番に解説していきます。
001: import java.awt.image.BufferedImage; 002: import java.io.File; 003: import javax.imageio.ImageIO; 004: import java.io.IOException;
Javaのクラスライブラリの中から「java.awt.image.BufferedImage」と「java.io.File」と「javax.imageio.ImageIO」と「java.io.IOException」と「java.awt.image.RasterFormatException」というパッケージにあるクラスを、このプログラム内で使うために記述します。 この記述により、ImageIOクラスとBufferedImageクラスとRasterFormatExceptionが利用できるようになります。
006: public class ColorConversion {
クラス名を、ColorConversionとしています。
007: // modeによるカラーテーブルの設定 008: static void setTable( int[] colorconv_r, int[] colorconv_g, int[] colorconv_b,
モード(mode)に対応した色変換テーブル(colorconv_r、colorconv_g、colorconv_b)を設定します。
015: case 0: 016: // 色反転 017: for ( i = 0; i < 256; ++ i ) { 018: colorconv_r[ i ] = 255 - i; 019: colorconv_g[ i ] = 255 - i; 020: colorconv_b[ i ] = 255 - i; 021: } 022: break;
mode=0の時、RGB(0~255)を255から引いた値をテーブルに格納しています。これで色が反転します。
024: case 1: 025: // 輝度を半分 026: for ( i = 0; i < 256; ++ i ) { 027: colorconv_r[ i ] = i / 2; 028: colorconv_g[ i ] = i / 2; 029: colorconv_b[ i ] = i / 2; 030: } 031: break;
mode=1の時、RGB(0~255)を2で割った値をテーブルに格納しています。これで画像の色が暗くなります。
033: case 2: 034: // 量子化 035: for ( i = 0; i < 256; ++ i ) { 036: colorconv_r[ i ] = ( i / 64 ) * 64; 037: colorconv_g[ i ] = ( i / 64 ) * 64; 038: colorconv_b[ i ] = ( i / 64 ) * 64; 039: } 040: break;
mode=2の時、RGB(0~255)を64で割った後、64を掛け直してテーブルに格納しています。RGBそれぞれのテーブルの値が、0/64/128/192の4種類だけになり、少ない色数で表現された画像になります。
042: case 3: 043: // サインカーブ 044: for ( i = 0; i < 256; ++ i ) { 045: rad = Math.toRadians( (double)i / 256.0 * 720.0 ); 046: col = (int)( Math.sin( rad ) * 127.0 + 127.0 ); 047: colorconv_r[ i ] = col; 048: colorconv_g[ i ] = col; 049: colorconv_b[ i ] = col; 050: } 051: break;
mode=3の時、RGB(0~255)を256.0で割った後、720.0を掛けることで、0~255の値を0.0~720.0°の範囲の角度に変換します。その角度のsinに127.0を掛けて127.0を足すことで0~254を求め、それをテーブルに格納しています。
053: case 4: 054: // 白っぽくする 055: for ( i = 0; i < 256; ++ i ) { 056: colorconv_r[ i ] = i + 100; 057: if ( 255 < colorconv_r[ i ] ) colorconv_r[ i ] = 255; 058: colorconv_g[ i ] = i + 100; 059: if ( 255 < colorconv_g[ i ] ) colorconv_g[ i ] = 255; 060: colorconv_b[ i ] = i + 100; 061: if ( 255 < colorconv_b[ i ] ) colorconv_b[ i ] = 255; 062: } 063: break;
mode=4の時、RGB(0~255)に100を足し、その値をテーブルに格納しています。値が255を超えた場合に255を格納します。
066: case 5: 067: // 赤成分だけの残す 068: for ( i = 0; i < 256; ++ i ) { 069: colorconv_r[ i ] = i; 070: colorconv_g[ i ] = 0; 071: colorconv_b[ i ] = 0; 072: } 073: break;
mode=5の時、R(0~255)の値を、Rの変換テーブルにそのまま格納します。GとBのテーブルには0を格納します。
076: case 6: 077: // 緑成分だけの残す 078: for ( i = 0; i < 256; ++ i ) { 079: colorconv_r[ i ] = 0; 080: colorconv_g[ i ] = i; 081: colorconv_b[ i ] = 0; 082: } 083: break;
mode=6の時、G(0~255)の値を、Gの変換テーブルにそのまま格納します。RとBのテーブルには0を格納します。
086: case 7: 087: // 青成分だけの残す 088: for ( i = 0; i < 256; ++ i ) { 089: colorconv_r[ i ] = 0; 090: colorconv_g[ i ] = 0; 091: colorconv_b[ i ] = i; 092: } 093: break;
mode=7の時、B(0~255)の値を、Bの変換テーブルにそのまま格納します。RとGのテーブルには0を格納します。
095: default: 096: // 入力値と出力値を同じにする 097: for ( i = 0; i < 256; ++ i ) { 098: colorconv_r[ i ] = i; 099: colorconv_g[ i ] = i; 100: colorconv_b[ i ] = i; 101: } 102: break;
modeが0~7以外の時、RGB(0~255)の値を、変換せずにテーブルに格納します。入力画像と出力画像が同じになります。
■関連コンテンツ
テーブルによる色変換 | テーブルによる色の変換方法を解説 |
テーブルによる色変換 その3 | テーブルによる色の変換方法を解説(その3) |
三角関数 sin | sinの意味と、Math.sinの使い方について解説 |
switch文 | 式による処理の分岐に使用するswitch文について解説 |
Javaの配列 | 同じ型の変数をまとめた配列について解説 |
■新着情報
2022.07.07 | 外部プログラムの実行 | exeファイル実行 |
2022.07.06 | 完全数 | 6=1+2+3 |
■広告
