2013-01-15 92 views
0

是否可以更改NSImage的原點?如果是的話,我會如何去做這件事。我在常規笛卡爾系統中使用了一些負值的座標系,我試圖在NSImage中的相應位置繪製它們,但是由於原點位於(0,0),所以有一些缺失。更改NSImage來源

編輯:說我有一個繪圖方面,需要做一個圖像的點(-10,-10),目前這不顯示出來。有沒有辦法解決這個問題?

+0

親切闡述。 –

+0

更新了更多的信息。 – stormbard

回答

0

我認爲你是NSImage與它的容器混淆。 NSImage沒有邊界或框架,因此沒有起源。它確實有一個大小,它可能表示它的birtmap表示(如果它有一個)的像素尺寸,或者可能表示它的邊界框(如果它是矢量圖像)。在(-10,-10)的像素位置處繪製圖像實際上並不合理。

NSImage顯示在一個容器(通常是一個NSImageView)中,容器的bounds.origin將指定圖像相對於imageView的位置,但不能修改位圖邊緣以外的像素。

在任何情況下,您可能都希望使用一個子類NSView,其中您將覆蓋您的自定義繪圖的drawRect方法。 NSView does有一個bounds.origin,但這與您的繪圖座標無關,而是與作爲整體繪製的內容在視圖邊界框中的位置無關。您將要繪製的座標系將參照您的圖形上下文,它將(通常)將原點(0,0)固定到左下角(OSX)或左上角(iOS)。如果您試圖在笛卡爾平面上表示負面點,則需要應用平移變換將您的點映射到該正座標空間中。

我想用幾句話來解釋一下,蘋果在他們的Quartz 2D Programming Guide中詳細解釋了一些東西。

+0

感謝您的迴應。顯然,通過我對該指南的多次閱讀,我錯過了這一點。你的解釋有助於消除我的困惑。 – stormbard

1

如果它就像iOS中(你可能不得不適應一個小的代碼),如果我的記憶不錯,你必須這樣做,因爲originreadOnly的
CGRect myFrame = yourImage.frame;
myFrame.origin.x=newX;
myFrame.origin.y=newY;
yourImage.frame = myFrame;

+0

它與iOS幾乎相同,但內存有點生疏。 NSImage或它的iOS對應UIImage都沒有框架屬性。他們有一個_size_,但沒有_origin_(請參閱下面的答案)... – foundry