0

我正在尝试将图像加载到我的 NSImageView/NSScrollView 中并以实际大小显示,但图像神秘地最终以大约一半大小显示。起初我认为它可能会被缩小以适应框架等的某种约束,但很快意识到这不可能,因为如果我物理放大图像尺寸(在图像编辑程序中)然后加载它再次,我发现我大概可以加载/显示尽可能大的图像。

有问题的图像的实际尺寸仅为 2505 x 930,我想这不是问题,因为我可以将其翻倍和翻两番而没有任何明显的问题(当然,显示时它们都缩小了约 50% )。我非常简单的代码的相关部分是:

- (IBAction)openSourceImage:(NSString*)aFilepath
{
// obtain image filepath passed from 'chooseFile'...
NSImage *theImage = [[NSImage alloc] initWithContentsOfFile:aFilepath];
if (theImage)
    {
    [theImageView setImage:theImage];
    // resize imageView to fit image; causes the surrounding NSScrollView to adjust its scrollbars appropriately...
    [theImageView setFrame:
        NSMakeRect([theImageView frame].origin.x, [theImageView frame].origin.y, [theImage size].width, [theImage size].height)];
    [theImageView scrollRectToVisible:
        NSMakeRect([theImageView frame].origin.x, [theImageView frame].origin.y + [theImageView frame].size.height,1,1)];
    [theImage release]; // we're done with 'theImage' we allocated, so release it

    // display the window title from the filepath...
    NSString *aFilename = [aFilepath lastPathComponent];
    [[theImageView window] setTitle:aFilename];
}

}

谁能告诉我这里哪里出错了,以及如何以实际尺寸显示图像?

解决方案:好的,所以调用“size”会导致显示的图像太小而无法使用,调用“pixelsHigh/pixelsWide”会导致放大图像的比例不确定...

我的测试应用程序使用几个滑块驱动的“十字准线”来绘制图像上特征的坐标(例如照片或地图)。纯属偶然,我无意中注意到,虽然加载的图像仅显示其实际尺寸的一小部分,但 x,y 坐标确实对应于现实生活(表示大约 70 像素/英寸)。去想那个...

使用:

[theImage setSize:NSMakeSize(imageSize.width * 4, imageSize.height * 4)];

我现在能够以已知的放大倍率加载图像,并将绘制的 x,y 测量值减小相同的因子。我还加入了一个 NSAffineTransform 方法,让我可以放大/缩小以获得最佳观看尺寸。

呸!这对于我相当新手级别的人来说是一个挑战,我仍然不了解原始显示问题的根本原因,但我想最终结果才是最重要的。再次感谢你们两个:-)

4

2 回答 2

2

我不太确定为什么图像尺寸不合适,但您可以尝试“校正”尺寸以匹配其表示的尺寸之一:

NSBitmapImageRep* aRep = [[theImage representations] objectAtIndex: 0];

NSSize correctedImageSize = NSMakeSize([aRep pixelsWide], [aRep pixelsHigh]);
[theImage setSize:correctedImageSize];

(当然,也许代表的大小也有误!)

于 2010-02-18T20:33:57.333 回答
1

size方法以点为单位返回大小,而不是像素。和方法是你所追求的pixelsHighpixelsWide

于 2010-02-18T20:47:13.123 回答