web-dev-qa-db-ja.com

画像回転アルゴリズム

画像をある程度回転させるアルゴリズム(入力)を探しています。

public Image rotateImage(Image image, int degrees)

(画像インスタンスは、各ピクセルのRGB値を含むint []に置き換えることができます。私の問題は、JavaME MIDP 2.0プロジェクトに実装する必要があるため、バージョン1.5より前のJVMで実行可能なコードを使用する必要があることです。 ?

編集:利用可能なSVG APIがないこと、および90-180-270以外の任意の角度で回転するメソッドが必要であることを忘れました

また、MIDP2.0ではJava.awt。*パッケージは利用できません。

19
Stefano Driussi

私がインターネットで見つけた画像回転アルゴリズムを説明する最高のページの1つは、Dan Bloombergのexcellentレプトニカライブラリに関連付けられています。レプトニカライブラリ自体はCで記述されており、役に立ちませんが、画像回転アルゴリズムに関する彼のページは次のとおりです。

http://www.leptonica.org/rotation.html

間違いなく読む価値があります。彼がページの2番目の部分で説明している、エリアマッピングによる回転アルゴリズムのようなものを実装することをお勧めします。

22
earino

一般的な解決策:宛先画像の各ピクセルについて、宛先ピクセルの座標を反対方向に回転させて、ソース画像のピクセルを取得します。

ソリューションの強化:回転は通常、正確なピクセル座標を提供しません。オーバーラップするパーセンテージに応じて、ソースピクセルとその隣接ピクセルの加重平均を実行します。

バイナリイメージのより高速なソリューション:イメージを連続する前景ピクセルの「ラン」に変換します。次に、これらの線の端点を回転させて、目的地に描画します。

通常、これにより整数の四捨五入によりわずかなギャップが生じるため、一方または両方の端点が整数から10%以上離れている場合は、上下に丸められた整数座標を使用して、単一のソースラインに対して2本の線を描画してパッチを適用します。

一方の端点が10%以内にあり、もう一方の端点が10%以内にない場合、2本の線は「V」字型を形成します。両方が10%以上ずれている場合、2本の線は「X」字型を形成します。

これは、X軸またはY軸に関して実行できます。軸と回転角の角度が最も小さいものを使用してください。 (つまり、回転角が45〜-45の場合は、X軸を使用します。)

バイナリイメージのさらに高速なソリューション:前景ピクセルよりも背景ピクセルが少ない場合は、宛先を前景で塗りつぶし、上記のアルゴリズムに従って背景ピクセルを使用します。

7
user20493

Nokiaフォーラムには、 画像の回転Java ME )に関する記事とコードがあります。

3
Stephen Denne

[〜#〜] lwuit [〜#〜] それが可能であり、オープンソースです。そこにコードを見つけることをお勧めします。

1
Honza
0
Ray Tayek

試すことができます http://www.j2mearmyknife.com/ 。画像の回転など、クールな視覚効果がたくさんあります。

0
Ovidiu