のとして裏打ちNSView
されたレイヤーを使用する方法はcontentView
ありNSDockTile
ますか? あらゆる種類のトリックを試しましたが、透明な領域しか得られません。CALayer
また、別のルートに進んで から画像を取得し、それを に使用しようとしまし[NSApp setApplicationIconImage:]
たが、運もありません。ここでの問題は、オフスクリーン画像の画像表現を作成していると思います。
質問する
911 次
1 に答える
2
いつものように、質問を投稿した直後に回答を得ました :) 今後の参考のためにここに投稿します: NSImage
Cocoa is my girlfriend blog post here http://www.cimgfで説明されているようにレイヤーから作成することで解決しました.com/2009/02/03/record-your-core-animation-animation/
唯一欠けているのは、何かをレンダリングするには、ビューをウィンドウに追加する必要があることです。そのため、投稿のコード例を使用すると、私の解決策は次のようになります。
NSView *myView = ...
NSWindow *window = [[NSWindow alloc] initWithContentRect:NSMakeRect(-1000.0, -1000.0, 256.0, 256.0) styleMask:0 backing:NSBackingStoreNonretained defer:NO];
[window setContentView:myView];
NSUInteger pixelsHigh = myView.bounds.size.height;
NSUInteger pixelsWide = myView.bounds.size.width;
NSUInteger bitmapBytesPerRow = pixelsWide * 4;
CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGContextRef context = CGBitmapContextCreate(NULL, pixelsWide, pixelsHigh, 8, bitmapBytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colorSpace);
[myView.layer.presentationLayer renderInContext:context];
CGImageRef image = CGBitmapContextCreateImage(context);
NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:image];
CFRelease(image);
NSImage *img = [[NSImage alloc] initWithData:[bitmap TIFFRepresentation]];
[NSApp setApplicationIconImage:img];
于 2012-02-10T09:03:28.147 に答える