画像(ビットマップ)の保存をするには?

解決


ホリー  2004-05-13 20:08:11  No: 8936  IP: [192.*.*.*]

下のようなプログラムを作ったのですが、保存しようとすると、
「ソースファイルが見つかりません」というエラーがですのですが、
どうすればいいのでしょうか。教えてください。


procedure TForm1.Button1Click(Sender: TObject);
var
  Name: String;

begin
  try
    if Open.Execute then
  begin
                Bitmap1 := TBitmap.Create;
    Name := Open.FileName;
    Bitmap1.LoadFromFile(Name);
                Invalidate;
  end;
  except
    Beep;
  end;
end;

画像の編集

procedure TForm1.FormPaint(Sender: TObject);
begin
        Canvas.Draw(0,0,Bitmap1);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
        if Save.Execute then
        begin
                Name := Save.FileName;
                Bitmap1.SaveToFile(Name);
        end;
end;

end.

編集    削除
John7  2004-05-13 21:04:46  No: 8937  IP: [192.*.*.*]

> procedure TForm1.Button4Click(Sender: TObject);
> begin
>         if Save.Execute then
>         begin
>                 Name := Save.FileName;
>                 Bitmap1.SaveToFile(Name);
>         end;
> end;

とりあえず、Name が関数内で宣言されてないようですね。
というより、
Bitmap1.SaveToFile(Save.FileName);
で良いのではないでしょうか。

編集    削除
つっか  2004-05-13 22:02:22  No: 8938  IP: [192.*.*.*]

> とりあえず、Name が関数内で宣言されてないようですね。

そうですね。Form1 にも Name プロパティーがあるのでコンパイルはできたの
でしょうね。ローカル変数にするにしても、プロパティーと同じ名前は避けた
方がいいです。

OnPaint イベントハンドラで、Bitmap1 を使っていますけど、まだ Button1 が
押される前では、エラーになりませんか? それと、Button1Click で Bitmap1
のインスタンスを作成していますけど、Button1 を押すたびに、あたらしい参照
が Bitmap1 に代入されて、以前のものが行方不明になりますね。Free はどこで
やっていますか?

編集    削除
ホリー  2004-05-13 23:23:13  No: 8939  IP: [192.*.*.*]

John7さん、つっかさん、返答ありがとうございました。
おかげでできるよになりました。

>OnPaint イベントハンドラで、Bitmap1 を使っていますけど、まだ Button1 が押される前では、エラーになりませんか?

エラーにはなりませんよ。

Freeは↓のようにやっているのですが、違うところにも付けたほうが良いのでしょうか?

procedure TForm1.FormDestroy(Sender: TObject);
begin
        Bitmap1.Free;
end;

編集    削除
つっか  2004-05-14 00:03:33  No: 8940  IP: [192.*.*.*]

Bitmap1 のインスタンスは、必ず一つ作られて、一つだけ作られる、
ということが守られればいいのです。ですから、Button1Click ではなく
OnCreate イベントハンドラでコンストラクタを実行してください。

Bitmap1 := TBitmap.Create;

これなら、OnDestroy で一つだけ確実に Free できます。

編集    削除
ホリー  2004-05-14 00:21:17  No: 8941  IP: [192.*.*.*]

つっかさん、ありがとうございました。
まだまだ初心者ですが、これからがんばって勉強しようと思います。

編集    削除