Timage上のJpeg画像に描画したい

解決


WAT  2008-06-27 06:26:55  No: 31076  IP: 192.*.*.*

TImageのソースにJpeg画像を設定し、マウスで描画(クリックした2点間に直線か矩形を描画)させたいのですが、エラーになります。
元画像がBMPの場合は問題ないようですが、Jpegでは不可能なんでしょうか。
WindowsXP+Delphi5 Pro

編集 削除
Manbon  2008-06-27 12:29:23  No: 31077  IP: 192.*.*.*

以下のような感じでBMPに変換するのはどうですか?

var
  Jpg: TJPEGImage;
  JpgFile: string;
begin
  Jpg := TJPEGImage.Create;
  try
    Jpg.LoadFromFile(JpgFile);
    Image1.Picture.Bitmap.Assign(Jpg);
  finally
    Jpg.Free;
  end;
end;

編集 削除
WAT  2008-07-01 23:09:01  No: 31078  IP: 192.*.*.*

manbonさん、ありがとうございました。
つまり、jpegのままでは描画はできないと..

わかりました。

編集 削除
ofZ  2008-07-02 08:24:13  No: 31079  IP: 192.*.*.*

直線(矩形)を書いたあと、書いたものも含めて保存する必要がないなら
TImageの上にTPaintBoxを重ねて貼りつけて、TPaintBoxに描画するとか。

編集 削除
junki  URL  2008-07-02 09:41:50  No: 31080  IP: 192.*.*.*

>jpegのままでは描画はできない

この部分の「jpegのままでは描画」の意味も分からないです。
jpegのままでは、そもそも表示することもできないです。
TImage では、内部的にビットマップ相当に変換して表示してるので、
明示的に変換すると TCanvas が使えて線が描けるわけです。
jpeg かどうかは結果を保存するときに指定するファイルフォーマットであって
ウィンドウズではどんな形式の画像でもユーザが描けるのはビットマップだけです。

編集 削除
WAT  2008-07-14 21:27:12  No: 31081  IP: 192.*.*.*

放置になってしまいまして、済みませんでした。よく調べたら過去に童謡の質問があったようなのですが、「プロジェクト***がEInvalidOperationクラスの例外を生成しました。ビットマップを持っている時のみイメージの変更が可能です。」というエラーになるのです。
全く同じ処理でソースをBMPファイルにした時は問題ありませんが、ソースをjpegファイルにした時のみ発生します。

編集 削除