2011-11-19 71 views
0

我正在尋找一種方法來定義鼠標不能離開的屏幕區域。我已經被robof mayoff(this問題的回答者)指示我可以使用Quartz Event Tap來檢測鼠標事件。這使我成爲這個問題解決方案的一部分。如何在背景中檢查鼠標在屏幕上的位置? (Cocoa/Objective C)

我需要定義屏幕的不規則區域,而不僅僅是一個矩形,鼠標不能離開。我一直在研究這個問題,唯一的想法是使用位圖來定義不規則區域,因爲它的形狀非常奇怪。不過,除了使用位圖外,我願意接受其他解決方案。

因爲這必須在Mac上完成,所以我確定我必須使用客觀的C/Cocoa。

我需要知道如何定義區域,同樣重要的是,如何在鼠標區域找到最近的點(這樣,如果鼠標嘗試移動到區域外面,我可以將鼠標移動到該區域)。

這類似於禁區將是什麼樣子:

screenshot

+1

您描述的方法將找到與T最接近T的線段相交的區域點。是最接近T的區域的點。 – JWWalker

+0

是的,如果您有更好的算法/公式,請分享它!我希望這樣能夠正常工作,因爲我會將鼠標移回到那一點,所以T將永遠不會超過該區域以外的幾個像素。但是,如果用戶非常快速地移動鼠標,它可能會離開該區域邊緣100像素,並且這會使我的算法不夠好。然而,現在我唯一能想到的就是A *這樣的路徑算法,我不認爲這是值得的。 – BumbleShrimp

回答

2

將你的面具加載到NSBitmapImageRep。例如:

mask = [NSBitmapImageRep imageRepWithData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForImageResource:@"mask"]]]; 

測試你對這樣的面具位置:

- (BOOL)isAllowablePoint:(CGPoint)point 
{ 
    if (point.x < 0 || point.y < 0 || point.x >= mask.pixelsWide || point.y >= mask.pixelsHigh) 
     return NO; 
    NSUInteger pixel[4]; 
    [mask getPixel:pixel atX:point.x y:point.y]; 
    return pixel[0] == 0; 
} 

確保你的面具的圖像保存在72 dpi的。您可以通過在預覽中打開圖像來檢查/修復此問題。選擇「工具」>「調整大小」,並確保解析框中顯示72.

0

如果你能表達面積爲矩形的工會,你會發現在每一個矩形最接近點鼠標點,然後其中一個點將成爲該地區的最近點。

+0

不幸的是,該地區的形狀將會順利圓潤,如下所示:http://imgur.com/RWffU – BumbleShrimp

相關問題