3

正方形に変換する必要がある台形セクションを含む画像があります (デスキュー)。私は 3D 変換行列を理解するのに本当に苦労しており、どこから始めればよいかわかりません。

現在、歪んだ形状を表す 4 つの CGPoints と、均一な長方形を表す 4 つの CGPoints があります。最初の 4 つの CGPoints を 3D 変換行列に変換して、画像の傾きを補正するにはどうすればよいですか?

私は基本的にこれの逆を探しています: iPhone 画像のストレッチ (スキュー)

最初の画像が入力形状になり、正方形の画像が出力になります。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

0

最も高い 2 つの CGPoints を見つけて、それらを平準化します。同時に、最も低い 2 つの CGPoints、最も左の 2 つの CGPoints、および最も右の 2 つの CGPoints を平準化します。

//assuming skewpoint1 & skewpoint2 are the highest points
if (skewpoint1.y < skewpoint2.y) 
   skewpoint1.y += speed;
   skewpoint2.y -= speed;
else
   skewpoint1.y -= speed;
   skewpoint2.y += speed;

最下点と、左端の 2 つと右端の 2 つの CGPoints の x 値について同様のことを行います。

また、ポイント間が 2xspeed 未満の場合にスナップ機能を追加して、両方の中央のポイントにスナップすることもできます。

if (abs(skewpoint1.y - skewpoint2.y) < (speed*2))
    //depending on which CGPoint is higher
    skewpoint1.y += (abs(skewpoint1.y - skewpoint2.y)/2);
    skewpoint2.y -= (abs(skewpoint1.y - skewpoint2.y)/2);
于 2012-08-07T17:46:25.367 に答える