我有以下Objective-C函数,用于将NSBitmapImageRep调整为指定大小。
目前,当处理大小为2048x1536的图像并尝试将其调整为300x225时,此函数会不断返回大小为600x450的NSBitmapImageRep。
- (NSBitmapImageRep*) resizeImageRep: (NSBitmapImageRep*) anOriginalImageRep toTargetSize: (NSSize) aTargetSize
{
NSImage* theTempImageRep = [[[NSImage alloc] initWithSize: aTargetSize ] autorelease];
[ theTempImageRep lockFocus ];
[NSGraphicsContext currentContext].imageInterpolation = NSImageInterpolationHigh;
NSRect theTargetRect = NSMakeRect(0.0, 0.0, aTargetSize.width, aTargetSize.height);
[ anOriginalImageRep drawInRect: theTargetRect];
NSBitmapImageRep* theResizedImageRep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect: theTargetRect ] autorelease];
[ theTempImageRep unlockFocus];
return theResizedImageRep;
}
调试它,我发现theTargetRect的大小合适,但对initWithFocusedRec的调用返回600x450像素(高x宽)的位图
我完全不知道为什么会这样。有没有人有任何见解?
答案 0 :(得分:1)
您的技术不会生成调整大小的图像。首先,方法initWithFocusedViewRect:
从聚焦窗口读取位图数据,并用于创建屏幕抓取。
您应该使用所需大小的新NSBitmapImageRep或NSImage创建新的图形上下文,然后将图像绘制到该上下文中。
像这样。
NSGraphicsContext* context = [NSGraphicsContext graphicsContextWithBitmapImageRep:theTempImageRep];
if (context)
{
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:context];
[anOriginalImageRep drawAtPoint:NSZeroPoint];
[anOriginalImageRep drawInRect:theTargetRect];
[NSGraphicsContext restoreGraphicsState];
}
// Now your temp image rep should have the resized original.