イメージファイルのサイズを変更する
Windows 10 / Visual Stadio Community 2019 / .NET Framework 4.7.2
イメージファイルを読み込みビットマップに変換し、それを指定したサイズに変更して、別ファイルに出力する。
本稿では Jpegファイルと Pngファイルで動作を確認した。対象となるイメージファイルのタイプは、 ImageFormatクラスのプロパティ に定義されている。
→
縮小
画像をクリックすると、実際の大きさの画像が別タグに表示されます。
イメージファイルを読み込む
指定したファイルからデータを読み込み、ビットマップオブジェクトを作成する。
イメージのサイズを変更する
サイズ変更後のイメージを出力するビットマップを組み込んだ Graphicオブジェクトを作成する。
DrawImageメソッドは、ファイルから読み込んだビットマップを、指定したサイズに変更して出力先のビットマップに描き出す。
本例では、変更後と同じサイズの出力先ビットマップを作成し、その原点(0, 0)からイメージを出力しているので、描画イメージと出力先ビットマップはぴったりと重なる。
イメージのサイズを変更するに際して、補間方法(InterpolationMode)を選択することができる。
詳細は、Microsoftの公式リファレンスを参照
本例では、最も滑らかな変換ができることになっている、HighQualityBicubic:高品質双三次補間を使用している。
補完方法によって実際、見た目にどの程度の差が出るのか?
いくつかの写真で、全ての補完方法を使って、3200 x 2400ピクセルの Jpegファイルを 800 x 600ピクセルに縮小してみたが、結果は、目視ではその差は全くわからず、全て同じに見えた。差が出るには、もう少し極端な条件が必要なのかもしれない。
イメージをファイルに出力する
Bitmapクラスの Saveメソッドでビットマップをファイルに出力する。引数の ImageFormatにより、イメージファイルの形式を指定することができる。色々な形式が選択できるが、詳細は、Microsoftの公式リファレンスを参照のこと。
[注意] しかしながら実際に試したところ、出力されるファイルの形式は、ファイルパスの拡張子により決まってしまうようだ。
例えば、ファイルの拡張子が、jpgであれば、ImageFormat引数に pngを指定しても、作成されるファイルは jpeg形式になる。
つまり、ImageFormatの指定は無意味に見えるのだが、果たしてこれはどういうことか。
アプリケーション「ペイント」のサイズ変更機能との比較
Windowsでは、ペイントを利用して、イメージファイルのサイズを変更することができる。もともと、カメラで写した写真のサイズを縮小するのに、この方法で行っていたが、ファイルをひとづつ処理しなくてはならないことが面倒であった。そこで、この章で紹介した機能を利用して、ファイルを一括して処理できるツールを自作してみたわけである。
ここで、ペイントで作成したファイルと、本例のコードで作成したファイルについて比べてみる。
![[/property.png]](/dot_net/23//property.png)
画像精度の面からみると、DPIはペイントの方が解析度は高い。ただし、このレベルでは、両者の画像とも全く同じにしか見えないので、実用的には全く問題ないと言える。
JPEG形式のファイルには、カメラの撮影情報が格納される。ペイントでは出力したファイルにその情報がそのまま引き継がれるが、カスタムツールの方では引き継がれない。撮影日時や GPS情報が失われるのは、かなり残念である。
これについては、公開されている JPEGファイルの構造を元に、ファイルからGPS情報を抜き出すことは可能である。GPS情報の取得については、Mac Swif版のプログラムでは実現している。