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

解決


ホリー  2004-05-13 20:08:11  No: 8936

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

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

> 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

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

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

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


ホリー  2004-05-13 23:23:13  No: 8939

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

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

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

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

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


つっか  2004-05-14 00:03:33  No: 8940

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

Bitmap1 := TBitmap.Create;

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


ホリー  2004-05-14 00:21:17  No: 8941

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加