JPEG形式を開くには?

解決


かんろ  2004-12-16 01:38:24  No: 12326

BMP形式の画像をJPG形式の画像に保存はできますが、保存した画像を開こうとすると「JPEGエラー#53」が出ます。

プログラムは以下の通りです。
よろしくお願いします。
//********************************開く
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  JPG : TJpegImage;
  JorB : String;
begin

  if OpenPictureDialog1.Execute then
  begin
    BitMap := TBitmap.Create;
    JorB := OpenPictureDialog1.FileName;

    if AnsiContainsText(JorB,'.jp') then
    begin
    JPG :=TJpegImage.Create ;
    JPG.LoadFromFile(OpenPictureDialog1.FileName);    //ファイルをロードする。
    BitMap.Assign(JPG);   //ビットマップにファイルをロードする。
    JPG.Free;
    end else if AnsiContainsText(JorB,'.bmp') then
    begin
      BitMap.LoadFromFile(OpenPictureDialog1.FileName);
    end;
    Form2.ImageView(BitMap);
  end;
end;

//********************************保存
procedure TForm1.BitBtn2Click(Sender: TObject);
var
  JPG : TJpegImage;
  j:String;
begin
   if SavePictureDialog1.Execute then
   begin
     if (SavePictureDialog1.Filter = 'jp') then
     begin
     JPG :=TJpegImage.Create ;
     JPG.Assign(BitMap);
     BitMap.SaveToFile(SavePictureDialog1.FileName);
     BitMap.Free;
     end else begin
     BitMap.SaveToFile(SavePictureDialog1.FileName);
     BitMap.Free;
     end;
   end;
end;


jok  2004-12-16 01:43:10  No: 12327

>    JPG.Assign(BitMap);
>    BitMap.SaveToFile(SavePictureDialog1.FileName);

Bitmap で保存してるからでは?
JPG.SaveToFile() を使わないと。


jok  2004-12-16 01:46:36  No: 12328

あと JPG.Free と TBitmap.Create; がありませんね。


かんろ  2004-12-21 23:17:51  No: 12329

jokさんの指摘通り直してみました。
保存などはできたのですが、JPG形式で保存した画像を開こうとするとエラーが出てしまいます。

プログラムは以下のようになりました。
//********************************開く
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  JPG : TJpegImage;
  JorB : String;
begin

  if OpenPictureDialog1.Execute then
  begin
    BitMap := TBitmap.Create;
    JorB := OpenPictureDialog1.FileName;

    if AnsiContainsText(JorB,'.jp') then
    begin
    JPG :=TJpegImage.Create ;
    JPG.LoadFromFile(OpenPictureDialog1.FileName);    //ファイルをロードする。
    BitMap.Assign(JPG);   //ビットマップにファイルをロードする。
    JPG.Free;
    end else if AnsiContainsText(JorB,'.bmp') then
    begin
      BitMap.LoadFromFile(OpenPictureDialog1.FileName);
    end;
    Form2.ImageView(BitMap);
  end;
end;

//********************************保存
procedure TForm1.BitBtn2Click(Sender: TObject);
var
  JPG : TJpegImage;
  j:String;
begin
   if SavePictureDialog1.Execute then
   begin
     if (SavePictureDialog1.Filter = '.jpg') then
     begin
     JPG :=TJpegImage.Create;
      JPG.Assign(BitMap);
     JPG.SaveToFile(SavePictureDialog1.FileName);
     JPG.Free;
     end else begin
     TBitmap.Create;
     BitMap.SaveToFile(SavePictureDialog1.FileName);
     BitMap.Free;
     end;
   end;
end;


Mr.XRAY  URL  2004-12-22 03:36:04  No: 12330

>保存などはできたのですが、

ということですが,保存した JPEGファイルのサイズはどうなっています
か.コードをもう少し整理してみてはどうでしょうか.
例えば.

Form2.ImageView(BitMap); --> Form1.Image1.....とか,

>TBitmap.Create;
>BitMap.SaveToFile(SavePictureDialog1.FileName);
>BitMap.Free;

(1)サンプルのBitmapファイルを一つ用意する.
(2)そのBitmapを読込んでJPEG画像にして保存する.
(3)JPEG画像を読込んでImage1に表示する.

これをButton1のクリックで実行するようにするとか...
この時,ファイル名を固定にしてやってみる等々...
コードをコピペすれば,ファイル名の変更で他の方が試すことが
できるとか.OSとDelphiのバージョンも明示する事も必要ですね.
とにかく簡単なコードでやってみるのが一番です.


AY  2004-12-22 22:11:41  No: 12331

Create、Freeなんだか?
ここの、Tips
http://madia.world.coocan.jp/delphi/DelphiTips.htm
に、Bmp>jpg  jpg>Bmpの丁寧な説明があります。
それをご覧になり、一度ソースをシンプルに書き直されてみては
どうでしょう。


マッコ  2004-12-25 22:25:08  No: 12332

参考になれば、
大きなJPEGを使うとエラーになることが書いてあるところがあります、
ここのcode sampleは僕は参考になりました。

http://buglist.jrsoftware.org/generated/entry0682.htm


かんろ  2005-01-12 03:13:24  No: 12333

お礼が遅くなってすみません。
無事、画像を変換・保存することができました。
教えていただいた物と自分のソースをよく見直した所
変換したデータを保存する前にfreeするという馬鹿なことをしていました。

皆様、ご教授ありがとうございました。


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

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






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