我正在尝试将图像加载到我的 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 方法,让我可以放大/缩小以获得最佳观看尺寸。
呸!这对于我相当新手级别的人来说是一个挑战,我仍然不了解原始显示问题的根本原因,但我想最终结果才是最重要的。再次感谢你们两个:-)