Jpegの上にペンで線を引くには

解決


あきお  2002-04-11 21:44:47  No: 780

下のプログラムでJpegをImage1の上にBmpとして読み込んでいるつもりなんですがどうやら間違っているらしいです。

if Str = '.jpeg' then  
  begin
    jp := TJPEGImage.Create ;
    Bmp := TBitmap.Create ;
    jp.LoadFromFile(OpenDialog1.FileName) ;
    Bmp.Assign(jp) ;
    Form2.Image1.Picture.Bitmap := Bmp ;
  end;

BitmapのファイルをImage1に読み込んだときはその上からペンを使って線を引けるのですがJpegだと

プロジェクトProject1.exeがEInvalidOperationクラスの例外を生成しました’ビットマップを持っているときのみイメージの変更が可能です’

という、エラーメッセージが表示されます。つまりImage1の上に展開されているのはBitmapに変換されたファイルではなくて、あくまでもJpegのイメージだと言う事なのでしょうか?
  ちなみにImage上に引く線は座標だけ保存したいのでファイル自体には上書きしなくても良いのですが。

長文ですみません


にしの  2002-04-11 22:01:46  No: 781

どういう方法で線を引いていますか?
ペンを使って、というのは、TPenでしょうか。
ということは、Image1.Canvas.Penに値を設定して、Image1.Canvas.LineToで書く、ということでしょうか。

上の方法でJPEGを読み込んでおいて、
Image1.Canvas.MoveTo(0,0);
Image1.Canvas.LineTo(50,50);
としましたが線が引けます。

Image1.Picture.Bitmap.Canvas.MoveTo(0,0);
Image1.Picture.Bitmap.Canvas.LineTo(50,50);
でも引けてました。

どうやって書いていますか?


あきお  2002-04-11 22:16:41  No: 782

さっそくのお返事ありがとうございます

  if Button = mbLeft then              
    begin
      Image1.Canvas.Pen.Color := clRed ;  
      Image1.Canvas.Pen.Width := 3 ;      
    if Form1.RadioButton1.Checked = True then 
      begin

        if Hantei = 1 then   {Hanteiが1のときはすでに始点が決まっている}     
          Image1.Canvas.LineTo(X,Y)
        else
          begin
            Image1.Canvas.MoveTo(X,Y) ;

            Hantei := 1 ;
          end ;

上のようにして線を引いています。ちょっとごちゃごちゃしてますが基本的には
Image1.Canvas.MoveTo(*,*);
Image1.Canvas.LineTo(*,*);
という形になってると思います。
環境はWin Me  でDelphi6  Personalを使っています。


あきお  2002-04-11 22:34:06  No: 783

どうやら最初のプログラムのIf文がちゃんと機能してないようです(全Elseの処理をしている )。もう少し自分でがんばってみます。


にしの  2002-04-11 22:40:16  No: 784

こちらではうまくいってしまいます(Delphi5)
Delphi6から仕様が変わったんでしょうか。
再現させるには、
Form2.Image1.Picture.Bitmap := Bmp ;
を、
Form2.Image1.Picture.Bitmap := Jp ; { JPEGをそのままアサイン }
とすれば、Delphi5でも再現しました。

回避策は、
Bmp.Assign(jp) ;
を、
bmp.Width  := jp.width;
bmp.Height := jp.Height;
bmp.Canvas.Draw(0, 0, jp);
Image1.Picture.Assign(bmp);
とすれば何とかうまくいきます。
# 色の設定等もコピーする必要があるかもしれません。


あきお  2002-04-11 22:48:43  No: 785

すいませんでした。単純に僕のミスです。Ifの判定のところで
if Str = '.jpeg' then  の所で  '.jpeg'ではなくて'.jpg' or '.JPG'にしなければいけませんでした。ご迷惑をかけました。

いつも初心者の僕にやさしく回答してくださってありがとうございます。


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








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