2017-07-07 62 views
2

我試圖將歪斜應用於postscript中的圖像。如果雙方-0.5指22.5度的水平和垂直軸的傾斜postscript中的中心剪切/歪斜

[1 -0.5 -0.5 1 0 0] concat 

:與我已經成功地做到了。問題是傾斜不居中,圖像的中心被移動,因此在應用傾斜之後,圖像不會保持在同一位置。

如何在維持位置的同時應用歪斜?我嘗試在傾斜之前/之後翻譯圖像,但我無法找到我應該翻譯圖像的程度,因此它始終保持在相同的位置。

回答

1

好吧,我終於找到了辦法。首先,該元件定位爲與通常的翻譯:

1135 568 translate 

然後,扭曲僅在一個軸線X或Y,不能同時在同一時間。在基體中的數量爲tan(skew_angle)因此,例如,用於在X軸的20度角:

[1 0 0.3639 1 0 0] concat 

在此之後,轉換圖像,因爲現在的圖像的邊界框的寬度越大,就可以計算這個額外的寬度爲additional_width = abs(object_height * tan(skew_angle))。所以,現在我們一半的寬度翻譯:

{additional_width/2} 0 translate 

現在我們做同樣的方式在Y上的傾斜:

[1 0.3639 0 1 0 0] concat 

,並計算額外的高度爲additional_height = abs(object_width * tan(skew_angle))

0 {additional_height/2} translate 

在此在施加偏斜之後,物體中心保持在相同位置。

1

傾斜工作通過改變當前的轉換矩陣,它根本不居中。

除非您進一步更改CTM,否則從左下角描述圖像,這是從從上至下繪製圖像的環境中打印到PostScript時的常見做法。

基本上,要解決您的問題,您需要了解PLRM中描述的矩陣操縱和數學。

假設您在繪製圖像之前立即應用了concat,並且沒有發生其他CTM操作,則圖像的左下角爲0,0。 concat不會影響(除非矩陣中有Tx和Ty成員),但它會改變繪製圖像的位置。你需要做的是在正常繪製圖像時計算圖像中心的座標,計算在應用修改的CTM之後座標將最終到達的位置,然後通過添加Tx和Ty來調整剪切矩陣值使得中心座標將處於所需的位置。或適當翻譯來源。

關鍵點(可能)是圖像有自己的矩陣應用在CTM的頂部;爲了計算圖像中心的用戶空間座標,您必須自己將圖像矩陣應用到CTM。並且您還需要再次應用剪切矩陣,以計算變換後圖像中心的位置。一旦你確定了香草圖像中心和剪切圖像中心的座標,就知道如何平移當前點,以便中心座標保持不變。

你還沒有提供一個例子,所以我不能爲你工作,我沒有一個簡單的工作。如果我有時間,我會試着拿出一個,如果我這樣做,我會在這裏發佈。