bmp以外のファイルを回転させるには

解決


よしき  2002-01-08 07:20:00  No: 427

ホームページを拝見しました。なんとかBitmap形式の画像の回転の方法はわかったのですが、そこでjpegのファイルも一度Bitmapにしてから回転をさせることで、何とかできたのですが、そのままで画像を回転する方法はないのでしょうか?


にしの  2002-01-08 17:53:12  No: 428

TJPEGImageを使えばできそうです。
たしか、Delphi3以上ならCD-ROMに入っていたような・・・。
# Delphi5にはインストール時に入ってました。ヘルプにもあります
でも、
> そこでjpegのファイルも一度Bitmapにしてから回転をさせることで、何とかできたのですが
って書いてありますね。
そのままで回転って、ファイルの中身を回転ということでしょうか。
それなら、TJPEGImageをつかってSaveToFileすれば保存されますが、これではだめですか。

Jpegの画像フォーマットの仕様のため、ファイルの中身を直に回転させることは難しいと思います。


よしき  2002-01-08 18:51:22  No: 429

返信ありがとうございます。
なるほど、TJPEGImage使ってみますね。
でもやはりBMPのように回転はできないのですね。


にしの  2002-01-08 22:30:43  No: 430

このホームページにある画像の回転は、90度回転のものしか見つけられなかったので勘違いかもしれませんが、BMPの回転は一度メモリ内に読み込んで、単純な2次配列上の入れ替えしかしていないと思います。
JPEGでもBMPでもPNGでも、2次配列として扱えば全て同じです。
ファイルに格納されているデータは、JPEGの場合圧縮されているので、一度元に戻してから出ないと回転できません。
回転したあと圧縮した場合、元のJPEGファイルとほとんど別のファイルになります。


よしき  2002-01-09 22:17:14  No: 431

返答ありがとうございます。
正直Delphiを始めたばかりなのでよくわからないのですが、現在の方法としては

1.JPEGファイルを読み込む
2.BMPに変換する
3.フォーム上のImageに表示する
4.ボタンを押して画像を回転(このページのソースを参考にしました。)

という方法をとっています。

ソースの概略としては

jpg:=TJPEGImage.Create;
BMP:=TBitmap.Create;
Jpg.LoadFromFile(FileName);
BMP.Assign(Jpg);
ShowImage.Picture.Bitmap:=BMP;

でBMPにしてから回転をしているのですが
必要ないということなのでしょうか?


にしの  2002-01-10 03:49:04  No: 432

それであってます。

そういう意味であれば、WindowsではJPEGをそのまま表示することはできません。
内部でBMP形式に変換されています。

JPEGは非可逆圧縮です。
非可逆圧縮の画像の場合、ある1点(x,y)の色を、瞬時に読み書きすることはできません。
一度デコードして、その点の色を読み(書き)、またエンコードしないとなりません。
このエンコードされたJPEGは、元のJPEGと比較して単純にどこが変わったかわかるものではありません。


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








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