2012-01-16 40 views
0

我想從NSView抓取屏幕截圖,使用NSImage緩衝區在屏幕頂部繪製一個字符串,然後保存所有內容。抓取的視圖是託管單個NSImageView的普通NSPanel內容視圖。用NSString在NSImage中裝飾屏幕截圖

不幸的是,輸出文件是我的字符串在全黑背景上沒有屏幕截圖的符號。

這是代碼:

NSImage *screenshot = [[NSImage alloc] initWithData:[mView dataWithPDFInsideRect:[mView bounds]]]; 

NSString *frameCounterString = @"123"; 
[screenshot lockFocus]; 
[frameCounterString drawAtPoint:NSMakePoint(10, 10) withAttributes:nil]; 
[screenshot unlockFocus]; 

任何想法是怎麼回事?

直接寫入圖像,即沒有字符串繪圖產生預期的結果(=檔案中的截圖)。

只要在結果變黑的lockFocus/unlockFocus方法調用添加..

使用NSBitmapImageRep:initWithFocusedViewRect:技術用於捕獲未出現在此情況下更好地工作,即:

screenshot = [[NSImage alloc] initWithSize:[mView bounds].size]; 
    [mView lockFocus]; 
    NSBitmapImageRep *bits = [[NSBitmapImageRep alloc] initWithFocusedViewRect:[mView bounds]]; 
    [mView unlockFocus]; 
    [screenshot addRepresentation:bits]; 

回答

0

右 - 現在合成幾個NSImages蘋果文檔建議。 一個用於屏幕截圖,比繪製該字符串加入一個新的空NSImage。

仍爲黑色。

要捕獲的視圖包含NSImageView,它必須是關於其內部圖像表示的內容:將NSImageView邊框設置爲none不會產生任何屏幕截圖。將邊框設置爲「照片」可以使用dataWithPDFInsideRect方法捕獲邊框。

需要找到一種更通用的方式來捕捉它,無論顯示模式是什麼..

+0

它只是一個圖像視圖,還是視圖中有其他視圖需要捕獲? – 2012-01-17 08:38:55

+0

這只是一個單一的圖像視圖:'窗口 - >內容視圖 - > NSImageView'。捕獲內容或圖像視圖對結果沒有什麼影響(兩個都是黑色) – Jay 2012-01-17 09:57:51

+0

如果它只是一個圖像視圖,並且所有你想要的都是圖像,那麼你可以向圖像視圖請求它的圖像,製作一個複製並將字符串繪製到該字符串中(如果您不想使某些東西能夠處理任何視圖)。 – 2012-01-17 16:53:27

0

我不知道爲什麼這樣做是不行的(你可能要file a bug),但我會建議做反而是這樣的:

  1. 創建渴望Desir的新NSImage中編輯大小。
  2. 把重點放在它上面。
  3. 將視角告訴display
  4. 繪製字符串。
  5. 解鎖焦點。
+0

不,不工作..黑色。 – Jay 2012-01-17 07:58:17