2022.11.16
2024.08.02
画像を操作するクラスの作成
はじめに
①エラー処理を簡単にしました。
画像の作成/読み込み/保存の失敗は、try { ~ } catchを使って処理する必要がありますが、ここで作成したクラスでは、メソッドの中でtry { ~ } catchを使い、成功した場合の戻り値をtrue、失敗した場合の戻り値をfalseにしています。これで、メソッドを呼ぶ側のソースの記述が短くなります。
②色の指定方法を拡張しました。
指定できる赤/緑/青の輝度は0~255ですが、このクラスの色を設定するメソッドの引数の輝度の範囲が0~255の範囲を超える場合、自動的に0~255の範囲に収めるようにしています。計算によって輝度を計算する場合に範囲を超えることがありますが、その計算値をそのままメソッドの引数に渡すことができます。
用意したメソッドは以下のとおりです。
MyBufferedImage0.createメソッド
boolean create( int width, int height, int type )
・指定したサイズ、種類の画像を作成します。 パラメータ width : 作成する画像の横のピクセル数 height : 作成する画像の縦のピクセル数 type : 作成するイメージの形式 指定例) BufferedImage.TYPE_INT_RGB 戻り値 true : 画像の作成に成功 false : 画像の作成に失敗
MyBufferedImage0.readメソッド
boolean read( String imgname )
・指定した画像ファイルを読み込みます。 パラメータ imgname : フルパスの画像ファイル名(拡張子は省略不可) 戻り値 true : 画像の読み込みに成功 false : 画像の読み込みに失敗
MyBufferedImage0.writeメソッド
boolean write( String imgname, String format )
・画像を指定した形式のファイルで保存します。 パラメータ imgname : フルパスの画像ファイル名 format : 保存する画像のフォーマットを指定 ("jpeg"、"png"、"bmp"など) 戻り値 true : 画像の読み込みに成功 false : 画像の読み込みに失敗
MyBufferedImage0.writeJPGメソッド
boolean writeJPG( String imgname )
・画像をJPEG形式のファイルで保存します。 パラメータ imgname : フルパスのJPEG画像ファイル名 戻り値 true : 画像の読み込みに成功 false : 画像の読み込みに失敗
MyBufferedImage0.writePNGメソッド
boolean writePNG( String imgname )
・画像をPNG形式のファイルで保存します。 パラメータ imgname : フルパスのPNG画像ファイル名 戻り値 true : 画像の読み込みに成功 false : 画像の読み込みに失敗
MyBufferedImage0.writeBMPメソッド
boolean writeBMP( String imgname )
・画像をBMP形式(ビットマップ)のファイルで保存します。 パラメータ imgname : フルパスのBMP画像ファイル名 戻り値 true : 画像の読み込みに成功 false : 画像の読み込みに失敗
MyBufferedImage0.getWidthメソッド
public int getWidth()
・画像の横のピクセルサイズを返します。 パラメータ なし 戻り値 画像の横ピクセル数
MyBufferedImage0.getHeightメソッド
public int getHeight()
・画像の縦のピクセルサイズを返します。 パラメータ なし 戻り値 画像の縦ピクセル数
MyBufferedImage0.getRGBメソッド
int getRGB( int x, int y, int defcolor )
・指定した座標の色を取得します。 パラメータ x : ピクセルのx座標 y : ピクセルのy座標 defcolor : (x,y)が画像の範囲外の場合に戻す値 戻り値 RGBを合成した色
MyBufferedImage0.setRGBメソッド
boolean setRGB( int x, int y, int color )
・指定した座標の色を設定します。 パラメータ x : ピクセルのx座標 y : ピクセルのy座標 color : 設定するRGBを合成した色 戻り値 (x,y)が画像の範囲内の場合、true (x,y)が画像の範囲外の場合、false
boolean setRGB( int x, int y, int r, int g, int b )
・指定した座標の色を設定します。 パラメータ x : ピクセルのx座標 y : ピクセルのy座標 r : 赤の輝度 g : 緑の輝度 b : 青の輝度 戻り値 (x,y)が画像の範囲内の場合、true (x,y)が画像の範囲外の場合、false 詳細 r、g、bは自動で0~255の範囲に変換されます。
MyBufferedImage0.createColorメソッド
static int createColor( int r, int g, int b )
・RGBを合成した色を取得します。 パラメータ r : 赤の輝度 g : 緑の輝度 b : 青の輝度 戻り値 RGBを合成した色 詳細 r、g、bを自動で0~255の範囲に変換した後に合成します。
MyBufferedImage0.getRメソッド
static int getR( int color )
・RGBを合成した色からR成分(赤の輝度)だけを抽出します。 パラメータ color : RGBを合成した色 戻り値 赤の輝度
MyBufferedImage0.getGメソッド
static int getG( int color )
・RGBを合成した色からG成分(緑の輝度)だけを抽出します。 パラメータ color : RGBを合成した色 戻り値 緑の輝度
MyBufferedImage0.getBメソッド
static int getB( int color )
・RGBを合成した色からB成分(青の輝度)だけを抽出します。 パラメータ color : RGBを合成した色 戻り値 青の輝度
以下は、検査に関するメソッドです。
MyBufferedImage0.isoutofrangeメソッド
boolean isOutofRange( int x, int y )
・指定した座標が画像の範囲外かを判定します。 パラメータ x : ピクセルのx座標 y : ピクセルのy座標 戻り値 (x,y)が画像の範囲外の場合、true (x,y)が画像の範囲内の場合、false
Javaソースコード
MyBufferedImage0.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; public class MyBufferedImage0 { // 画像 BufferedImage img = null; // コンストラクタ public MyBufferedImage0() { img = null; } // 画像の横サイズを取得 public int getWidth() { // 画像がなければ、0を戻す if ( null == img ) return 0; return img.getWidth(); } // 画像の縦サイズを取得 public int getHeight() { // 画像がなければ、0を戻す if ( null == img ) return 0; return img.getHeight(); } // 画像の作成 public boolean create( int width, int height, int type ) { // BufferImageのimgにnullを代入 img = null; // 画像の作成 try { img = new BufferedImage( width, height, type ); } catch ( Exception e ) { // 画像作成に失敗 return false; } // ここまでくれば、作成に成功 return true; } // 画像の読み込み public boolean read( String imgname ) { // BufferImageのimgにnullを代入 img = null; // 画像の読み込み try { // imgnameを読み込んでimgにセット img = ImageIO.read( new File( imgname ) ); } catch (Exception e) { // imgnameの読み込みに失敗 return false; } // ここまでくれば、読み込み成功 return true; } // 画像の保存 public boolean write( String imgname, String format ) { // 画像がない場合 if ( null == img ) return false; // 画像の保存 try { // imgnameに保存 if ( false == ImageIO.write( img, format, new File( imgname ) ) ) return false; } catch ( Exception e ) { // imgnameの保存に失敗 return false; } // ここまでくれば、保存に成功 return true; } // JPEG画像の保存 public boolean writeJPG( String imgname ) { return write( imgname, "jpeg" ); } // PNG画像の保存 public boolean writePNG( String imgname ) { return write( imgname, "png" ); } // BMP画像の保存 public boolean writeBMP( String imgname ) { return write( imgname, "bmp" ); } // (x,y)が画像の外かを調べる public boolean isOutofRange( int x, int y ) { // 画像がない場合、画像の外 if ( null == img ) return true; // 座標の値がマイナスの場合、画像の外 if ( 0 > x ) return true; if ( 0 > y ) return true; // 座標の値が画像幅以上の場合、画像の外 if ( img.getWidth() <= x ) return true; if ( img.getHeight() <= y ) return true; // (x,y)は画像の内側 return false; } // (x,y)の色を取得 public int getRGB( int x, int y, int defcolor ) { // 画像がない場合、defcolorを戻す if ( null == img ) return defcolor; // 画像の範囲外の場合、defcolorを戻す if ( isOutofRange( x, y ) ) return defcolor; // 画像の色を戻す return img.getRGB( x, y ); } // (x,y)の色を設定、色はrgbを合成したintで指定 public boolean setRGB( int x, int y, int color ) { // 画像がない場合、defcolorを戻す if ( null == img ) return false; // 画像の範囲外の場合、falseを戻す if ( isOutofRange( x, y ) ) return false; // 画像の色を戻す img.setRGB( x, y, color ); return true; } // (x,y)の色を設定、色はrgbをそれぞれintで指定 public boolean setRGB( int x, int y, int r, int g, int b ) { int color; // rgbを合成 color = createColor( r, g, b ); // 合成した色colorを設定 return setRGB( x, y, color ); } // 色rgbを合成 public static int createColor( int r, int g, int b ) { // rgbを0~255の範囲に収める if ( 0 > r ) r = 0; if ( 0 > g ) g = 0; if ( 0 > b ) b = 0; if ( 255 < r ) r = 255; if ( 255 < g ) g = 255; if ( 255 < b ) b = 255; // rgbを合成して戻す return ( r << 16 ) | ( g << 8 ) | b; } // 合成した色からrの値を取得 public static int getR( int color ) { return ( color >> 16 ) & 0xff; } // 合成した色からgの値を取得 public static int getG( int color ) { return ( color >> 8 ) & 0xff; } // 合成した色からbの値を取得 public static int getB( int color ) { return color & 0xff; } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis MyBufferedImage0.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac MyBufferedImage0.java
「MyBufferedImage0」を使ったプログラム
以下に、MyBufferedImage0.javaを利用した画像処理を掲載しています。
このサイトのオリジナルクラスのMyBufferedImage0クラスを利用して、JPEG、BMP、TIFFなどの各種画像ファイルをPNG形式のファイルに保存するプログラムを紹介しています。
このサイトのオリジナルクラスのMyBufferedImage0クラスを利用して、JPEG、PNG、BMP、TIFFなどの各種画像の横と縦のピクセル数を求めるプログラムを紹介しています。
このサイトのオリジナルクラスのMyBufferedImage0クラスを利用して、フルカラーの画像をセピア色に変換してをJPEGG形式のファイルに保存するプログラムを紹介しています。
関連コンテンツ
このサイトのオリジナルクラスのMyBufferedImage0クラスを利用して、JPEG、PNG、BMP、TIFFなどの各種画像の横と縦のピクセル数を求めるプログラムを紹介しています。
このサイトのオリジナルクラスのMyBufferedImage0クラスを利用して、フルカラーの画像をセピア色に変換してをJPEGG形式のファイルに保存するプログラムを紹介しています。
このサイトのオリジナルクラスのMyBufferedImage0クラスを利用して、JPEG、BMP、TIFFなどの各種画像ファイルをPNG形式のファイルに保存するプログラムを紹介しています。