NSImageView setImageScaling notWorkingCorrectly

时间:2012-07-05 16:10:22

标签: objective-c cocoa

我在nsimageview中正确缩放图像时遇到问题。发生的情况是加载图像时,它不会填满整个nsimageview。我使用了NSScaleToFit,它完全拉伸了图像。由于我不知道照片的尺寸(它会根据使用的图像而改变)我无法将nsimageview设置为一个大小并将其保留在那里。 我想要做的是按比例填写整个nsimageview图像,即使某些图像被截断也是如此。

这是我正在使用的代码:

NSString *image_path = [applicationSupportDirectory stringByAppendingPathComponent:desktop_name];
        NSImage *imageFromBundle = [[NSImage alloc] initWithContentsOfFile:image_path];
        [ViewImage setImageScaling:NSScaleProportionally];
        [ViewImage setImage: imageFromBundle];

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我希望缩放图像以填充,但保持原始图像的纵横比。奇怪的是,这并不像看起来那么简单,并且没有开箱即用的NSImageView。我希望NSImageView在使用superview(s)调整大小时能够很好地扩展。我创建了一个可以在github上找到的插入式NSImageView子类:KPCScaleToFillNSImageView

答案 1 :(得分:0)

我不认为这样的东西是内置的;你可能不得不自己改造图像。

虽然相对简单;您可以看到示例实现here

答案 2 :(得分:0)

我制定了自己的解决方案,因为内置的解决方案不起作用。

NSRect frame = [MyWindow frame];

   if (abs(windowHeight-[imageFromBundle size].width) > abs(windowWidth-[imageFromBundle size].height)) {
        frame.size.height = windowWidth;
        frame.size.width = 1+windowWidth*(([imageFromBundle size].width/[imageFromBundle size].height-(10*pow([imageFromBundle size].width, 2))/(pow([imageFromBundle size].height, 2)* windowHeight)));
    } else {
        frame.size.width = windowHeight;
        frame.size.height = ((windowHeight/[imageFromBundle size].width)*[imageFromBundle size].height);
    }

    [MyWindow setFrame: frame
             display: YES
             animate: YES];