首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSBitmapImageRep -initWithFocusedViewRect正在将图像大小加倍

NSBitmapImageRep -initWithFocusedViewRect正在将图像大小加倍
EN

Stack Overflow用户
提问于 2016-01-06 06:32:31
回答 1查看 352关注 0票数 0

我有以下objective-C函数,用于将NSBitmapImageRep调整为指定的大小。

目前,当处理大小为2048x1536的图像并尝试将其大小调整为300x225时,此函数不断返回大小为600x450的NSBitmapImageRep。

代码语言:javascript
复制
- (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宽)的位图

我完全不知道为什么会发生这样的事情。有谁有什么见解吗?

EN

回答 1

Stack Overflow用户

发布于 2016-01-06 07:21:01

您的技术不会产生调整大小的图像。首先,initWithFocusedViewRect:方法从聚焦窗口读取位图数据,并用于创建屏幕抓取。

您应该使用所需大小的新NSBitmapImageRep或NSImage创建一个新的图形上下文,然后将图像绘制到该上下文中。

就像这样。

代码语言:javascript
复制
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.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34622456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档