我想從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];
它只是一個圖像視圖,還是視圖中有其他視圖需要捕獲? – 2012-01-17 08:38:55
這只是一個單一的圖像視圖:'窗口 - >內容視圖 - > NSImageView'。捕獲內容或圖像視圖對結果沒有什麼影響(兩個都是黑色) – Jay 2012-01-17 09:57:51
如果它只是一個圖像視圖,並且所有你想要的都是圖像,那麼你可以向圖像視圖請求它的圖像,製作一個複製並將字符串繪製到該字符串中(如果您不想使某些東西能夠處理任何視圖)。 – 2012-01-17 16:53:27