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;
> JPG.Assign(BitMap);
> BitMap.SaveToFile(SavePictureDialog1.FileName);
Bitmap で保存してるからでは?
JPG.SaveToFile() を使わないと。
あと JPG.Free と TBitmap.Create; がありませんね。
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;
>保存などはできたのですが、
ということですが,保存した 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のバージョンも明示する事も必要ですね.
とにかく簡単なコードでやってみるのが一番です.
Create、Freeなんだか?
ここの、Tips
http://madia.world.coocan.jp/delphi/DelphiTips.htm
に、Bmp>jpg jpg>Bmpの丁寧な説明があります。
それをご覧になり、一度ソースをシンプルに書き直されてみては
どうでしょう。
参考になれば、
大きなJPEGを使うとエラーになることが書いてあるところがあります、
ここのcode sampleは僕は参考になりました。
http://buglist.jrsoftware.org/generated/entry0682.htm
お礼が遅くなってすみません。
無事、画像を変換・保存することができました。
教えていただいた物と自分のソースをよく見直した所
変換したデータを保存する前にfreeするという馬鹿なことをしていました。
皆様、ご教授ありがとうございました。
ツイート | ![]() |