


 
 
 
 
 
 
 |
Delphi2010 画像を開く/保存の画面 2010/11/01 |
前々回は[Dialogs]内の「OpenDialog」(オープンダイアログボックス=「開く」画面)、前回は[Dialogs]内の「SaveDialog」(セーブダイアログボックス=「保存」画面)について見ました。今回は同じく[Dialogs]内にある「OpenPictureDialog」(「画像を開く」画面)および「SavePictureDialog」(「画像を保存」画面)です。これら画面は Delphi6 にもあります。
「テスト22」として新規作成しておきます(フォルダ「022」)。取り合えず配置してみます。1つ目ですので Nameプロパティはそれぞれ「OpenPictureDialog1」「SavePictureDialog1」となります。アイコン絵となりますが実行時には「開く」「保存」画面が表示されます。
この2つのコンポーネントは、画像ファイルを扱う場合のために特化したものです。<オブジェクトインスペクタ>を見て比較すれば分かるように、プロパティ・イベントは同じです。但し、Filterプロパティが初期状態で既にセットされています。
すべて (*.gif;*.png;*.jpg;*.jpeg;*.bmp;*.tif;*.tiff;*.ico;*.emf;*.wmf)
|*.gif;*.png;*.jpg;*.jpeg;*.bmp;*.tif;*.tiff;*.ico;*.emf;*.wmf|GIF 画像 (*.gif)|*.gif|Portable Network Graphics (*.png)|*.png|JPEG イメージファイル (*.jpg)|*.jpg|JPEG イメージファイル (*.jpeg)|*.jpeg|ビットマップ (*.bmp)|*.bmp|TIFF 画像 (*.tif)|*.tif|TIFF 画像 (*.tiff)|*.tiff|アイコン (*.ico)|*.ico|エンハンスメタファイル (*.emf)|*.emf|メタファイル (*.wmf)|*.wmf |
これをこのまま使っても構いませんが、不要なものは消しても大丈夫です。
そして、実際に画面を表示すると、画面上に画像のプレビュー表示が行われるようになります。試しに、ラベル、スクロールボックス、スクロールボックス上にイメージ、ボタン2つを配置します。
OpenPictureDialog1の Optionsプロパティの ofPathMustExist、ofFileMustExistを「True」にします。また、SavePictureDialog1の Optionsプロパティの ofPathMustExist、ofOverwritePromptを「True」にします。uses節に「JPEG, GIFimg, PNGimage」を追加しておき、フォームを表示した際のOnShowイベント、ボタンをクリックした際のイベントのイベントハンドラを記述します。
procedure TForm1.FormShow(Sender: TObject);
begin
Label1.Caption := '' ;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
fn : string ;
begin
fn := Label1.Caption ;
with OpenPictureDialog1 do begin
InitialDir := ExtractFilePath(fn);
FileName := ExtractFileName(fn);
if (Execute) then begin
fn := FileName ;
Label1.Caption := '' ;
Image1.Picture := nil ;
try
Image1.Picture.LoadFromFile(fn);
Image1.Width := Image1.Picture.Width ;
Image1.Height := Image1.Picture.Height ;
Label1.Caption := fn ;
except
;
end;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
fn : string ;
begin
fn := Label1.Caption ;
if (fn = '') then exit ;
with SavePictureDialog1 do begin
InitialDir := ExtractFilePath(fn);
FileName := ExtractFileName(fn);
if (Execute) then begin
fn := FileName ;
try
Image1.Picture.SaveToFile(fn);
Label1.Caption := fn ;
except
if (FileExists(fn)) then
DeleteFile(fn);
end;
end;
end;
end; |
ちなみに私は例外処理で「try〜finally」はほとんど使わず大抵の場合は「try〜except」を使っていますが、これは、「try〜finally」の場合、この例外処理直後の処理が実行されず、この手続き/関数が終了してしまうからです。ここで終了すれば問題はないのですが後で追記をする場合もあるのでその場合に「ど忘れ」してしまうと不具合の原因になってしまうこともあるからです。
さて、これで保存・コンパイル(再構築)・実行を行います。

[開く]ボタンをクリック
↓

試しに、Delphi2010内のWelcomeページの画像フォルダ内
を参照して、その中の1つを指定してみます
↓

画像ファイルを開きました
[保存]ボタンをクリック
↓

フォルダをこのプログラムのあるフォルダにして
名前をつけて[保存]をクリック
画像ファイルは何もないので何も表示されません
↓
再度、[保存]ボタンをクリック
↓

先ほど保存した画像ファイルが
プレビュー表示されるのが分かります
上記は、Windows7(Aero)+Delphi2010 での表示結果です。Windowsの種類等によって画面表示状態が変わる場合があります。
イメージ同様、uses節に「JPEG」を追加しないと、JPEGファイルは扱えません。同様に、uses節に「GIFimg」を追加しないとGIFファイルは扱えませんし、「PNGimage」を追加しないとPNGファイルは扱えません。また、TIFFファイルについては
TWICImage が利用できるのは、Windows XP SP3 以上の OS で、DirectX ランタイムを使用している場合だけです。 |
という制約があります(TIFFイメージは、TWICImageオブジェクトとなります)。
保存する際、上記で簡単に SaveToFile メソッドを使ってしまいましたが、BMP形式・JPEG形式・GIF形式・PNG形式・TIFF形式で保存する際の手順というのはそれぞれ各種設定等があるため各々違ってくると思われます。単純に、拡張子を変えただけでは画像形式の変換はできませんので御注意下さい。また、アイコン(.ico)形式、メタファイル(.wmf、.emf)形式も特殊ですので御注意下さい。
という訳で、「保存」の方は色々とあると思いますが、「開く」の方は結構簡単に出来ますので、簡単な画像ビューワーソフト等はすぐに作れると思います。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
▲2010/10/31
2010/11/01
▼2010/11/02
シェアウェア
Script!World
データベース
|