作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
最佳答案
我实际上已经这样做了,但我是在 objective-C 中做的。
它实际上需要一些工作才能实现,但简而言之:
NSPoint mouseLoc;
BubbleNSImage * magImg;
BubbleNSImage * magGlass;
mouseLoc = [self convertPoint:[event locationInWindow] fromView:nil];
// Setup the magnifying glass image
magGlass = [[NSImage alloc] initWithData:
[[NSImage imageNamed:@"magnifierCursor.png"] TIFFRepresentationUsingCompression:NSTIFFCompressionNone factor:0]];
// Get a 4x zoomed verion of a selection around where the mouse is
// set the image for the image view
if( 0 == _zoomMode ){
magImg = [BubbleNSImage getPixelMultipliedNSImageRegionFromImage:self.image
withMultiplier:4
andSubRegion:NSMakeRect(mouseLoc.x - 17,
self.image.size.height - mouseLoc.y - 17,
34,
34)];
}else{
magImg = [BubbleNSImage getAppleMultipliedNSImageRegionNSImage:self.image
withMultiplier:4
andInterpolationMethod:_zoomMode
andSubRegion:NSMakeRect(mouseLoc.x - 17,
mouseLoc.y - 17,
34,
34)];
}
// Mask the 4x zoomed version with a mask made for the zoomer
[magImg maskWithImage:[NSImage imageNamed:@"magnifierCursorMask.png"]
andMaskOffset:NSMakePoint(0, 0)
andMaskColor:[NSColor colorWithRed:0 green:0 blue:0 alpha:1]];
// Add the 4x zoomed image behind the magnifying glass image
[magGlass addImageBehind:(NSImage *)magImg
withOffset:NSMakePoint(16, 16)
clipToOrigImgSize:NO];
// Preseent the full image as the cursor
[[[NSCursor alloc] initWithImage:(NSImage *)magGlass hotSpot:NSMakePoint(83, 83)] set];
上面代码中的 BubbleNSImage 是 NSImage 的一个子类,它允许我对 NSImages 执行一系列标准 NSImage 对象不可用的操作。如您所见,它允许我使用 apple 的不同插值器进行缩放,以及使用我个人编写的像素复制添加缩放。它允许我设置缩放倍数,以及我希望缩放的子区域。
稍后它允许我执行 mask 操作(这很有用,因为我也使用了圆形放大镜,并且需要在圆圈外进行裁剪。
然后它允许我执行叠加操作,我将剪裁后的缩放图像放在我的放大镜图像后面。
最后,您需要用新创建的图像初始化一个新的光标对象,然后将其设置为当前光标。
objective-c 代码:
-(void)mouseExited:(NSEvent *)event{
[[NSCursor arrowCursor] set];
}
有相当多的示例代码可以执行我上面高级算法化的许多图像处理功能。
关于swift - 如何在NSView中实现放大镜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39832849/
我是一名优秀的程序员,十分优秀!