好吧所以我试着这样做,这样当我的应用程序打开时,光标会改变,但要改变它,我会放置一个图像叠加层。所以这是我的代码......
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// get the cursor image
NSPoint mouseLoc;
mouseLoc = [NSEvent mouseLocation]; //get cur
NSLog(@"Mouse location is x=%d,y=%d",(int)mouseLoc.x,(int)mouseLoc.y);
// get the mouse image
NSImage *overlay = [[[NSCursor arrowCursor] image] copy];
NSLog(@"Mouse location is x=%d,y=%d cursor width = %d, cursor height = %d",(int)mouseLoc.x,(int)mouseLoc.y,(int)[overlay size].width,(int)[overlay size].height);
int x = (int)mouseLoc.x;
int y = (int)mouseLoc.y;
int w = (int)[overlay size].width;
int h = (int)[overlay size].height;
int org_x = x;
int org_y = y;
size_t height = CGImageGetHeight([NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"arrow" ofType:@"png"]]);
size_t width = CGImageGetWidth([NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"arrow" ofType:@"png"]]);
int bytesPerRow = CGImageGetBytesPerRow([NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"arrow" ofType:@"png"]]);
unsigned int * imgData = (unsigned int*)malloc(height*bytesPerRow);
// have the graphics context now,
CGRect bgBoundingBox = CGRectMake (0, 0, width,height);
CGContextRef context = CGBitmapContextCreate(imgData, width,
height,
8, // 8 bits per component
bytesPerRow,
CGImageGetColorSpace([NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"arrow" ofType:@"png"]]),
CGImageGetBitmapInfo([NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"arrow" ofType:@"png"]]));
// first draw the image
CGContextDrawImage(context,bgBoundingBox,[NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"arrow" ofType:@"png"]]);
// then mouse cursor
CGContextDrawImage(context,CGRectMake(0, 0, width,height),[NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"arrow" ofType:@"png"]]);
// then mouse cursor
CGContextDrawImage(context,CGRectMake(org_x, org_y, w,h),[overlay CGImageForProposedRect: NULL context: NULL hints: NULL] );
// assuming both the image has been drawn then create an Image Ref for that
CGImageRef pFinalImage = CGBitmapContextCreateImage(context);
CGContextRelease(context);
return pFinalImage; /* to be released by the caller */
}
所以我尝试了这个并且它编译了关于url路径的警告,但它没有错误。但是当我打开应用程序时,它会崩溃!那么有人可以帮助我吗?
答案 0 :(得分:1)
如果你想更改光标,为什么不用你想要显示的任何图像创建NSCursor
的新实例?
答案 1 :(得分:0)
您正在使用NSURL*
并将其传递给采用CGImageRef
的函数。这甚至没有意义,所以我不知道为什么你没有得到错误。要从URL加载CGImage,您需要使用像CGImageSourceCreateWithURL
这样的CGImageSource函数。
P.S。,而不是仅仅说它崩溃,在调试器下运行它,并找出它崩溃的确切位置。