1

私はjpgファイルの大きなライブラリを管理するためにいくつかのバッチルーチンに取り組んでいます。4mb以上のファイルを40kb以上にすばやくダウンサイズする素晴らしいルーチンがあります。CCR.Exifを使用して、画像を回転させる必要があるかどうかを判断できます。私の問題は、画像を保存する前に画像を回転させるコードが見つからないことです。画像を画面に表示するオーバーヘッドを発生させることなく、これを実行できる必要があります。

組み込みのjpeg.pasを使用しています。CodeCentralでGabrielCorneanuによる別のライブラリを見つけましたが、DXE2用に更新されていません。私がする必要があるのは90°の回転だけです。

どんな助けでも大歓迎です!

4

3 に答える 3

2

JPGは圧縮されているため、画像データを操作する前にレンダリングする必要があります。表示されていないキャンバスであっても、それらをレンダリングするコンポーネントにロードする必要があります。次に、Windows API呼び出しを使用して、キャンバスに直接アクセスして画像を回転させることができます。これまで画像を回転させたことはありませんが、キャンバスにアクセスして他の方法で画像を操作しました。

GR32とEFGはどちらも、いくつかのコンポーネントとアルゴリズムを備えた優れたサイトです。これは、画像を回転させるEFGのサイトの1つの例です。コードはDelphi3ですが、画像操作には問題なく機能するはずです。

ソースを使用したEFGの例

TImage32画像を90度回転させる方法もあります。を参照してくださいTImage32.Bitmap.Rotate90TImage32はGR32ライブラリの一部であり、Delphi-XE2用に更新されています。

svn co https://graphics32.svn.sourceforge.net/svnroot/graphics32/trunk graphics32

参照:GR32ホームページ

于 2012-08-09T00:30:00.220 に答える
1

JPEGを90度ずつ段階的に回転させる必要がある場合は、ロスレス変換を探してください。たとえば、irfanview.comには特別なプラグインDLLがありますが、パブリックAPIはありませんが、Irfan Authorに依頼するか、デバッガーとcffエクスプローラーを使用してリバースエンジニアリングすることができます。

それがどのように実装されているかについての議論を含め、多くの議論はグーグルだけで行われるかもしれません。 https://www.google.ru/search?client=opera&q=lossless+jpeg+rotation

コンポーネントカタログには、 http://www.torry.net/quicksearchd.php? String = jpeg +lossless&Title=Noのようなものがあります。

これは、90度ステップより細かい回転では機能しませんが、直交ターンの場合は、ロスレスjpeg変換を検索し続けます。

于 2012-08-09T14:39:33.120 に答える
0

JPEG画像を回転させる最も速い方法は、JPEGピクセルを左から右(x、y)に読み取り、デコードし、それらを(y、x)としてビットマップメモリ​​に書き込む、JPEGデコーダー用の新しい/代替ピクセルポンプを作成することです。 -つまり、同じスキャンラインの列ごとに1ピクセルを書き込む通常のモードではなく、同じオフセットでスキャンラインごとに1ピクセルを書き込みます。

それ以外のものは、ビットマップデータに対して複数のパスを作成します。

于 2012-08-09T01:29:49.377 に答える