我正在尝试将文件的图标更改为NSView
的表示形式。我使用以下代码来执行此操作。
[mainDisplay lockFocus];
NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:[mainDisplay bounds]];
[mainDisplay unlockFocus];
NSImage *image = [[NSImage alloc] initWithData:[rep representationUsingType:NSTIFFFileType properties:nil]];
[[NSWorkspace sharedWorkspace] setIcon:image forFile:[savePanel filename] options:0];
这很有效。它完全按照我的意愿改变图标,除了白色的任何透明度这一事实。我怎样才能保持透明度?我知道它适用于Photoshop,但可以使用Apple的框架吗?
答案 0 :(得分:4)
您不能以这种方式获取具有透明度的图像,因为[NSBitmapImageRep initWithFocusedViewRect:]
从窗口服务器获取一段渲染图像,其中视图的图像已经展平为具有其他底层视图和窗口背景的图像。
您需要的是以适当的格式分配新的干净NSBitmapImageRep
并在其上呈现视图的内容:
NSBitmapImageRep* rep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil
pixelsWide:[mainDisplay bounds].size.width pixelsHigh:[mainDisplay bounds].size.height
bitsPerSample:8 samplesPerPixel:4 hasAlpha:YES isPlanar:NO
colorSpaceName:NSDeviceRGBColorSpace
bytesPerRow:[mainDisplay bounds].size.width * 4 bitsPerPixel:32];
[mainDisplay cacheDisplayInRect:[mainDisplay bounds] toBitmapImageRep:rep];