首页 文章

NSImage总是被缩放并且看起来很糟糕

提问于
浏览
0

我想创建一个NSScrollView对象的NSImage,所以我可以使用平面图形进行动画制作 .

当我将我的scrollview对象渲染成图形并将其添加回我的窗口时,它可以工作,但看起来非常糟糕,因为它被缩放到99%或者其他东西 . 我希望图像不缩放,100%像素精确 . (注意:图像没有缩放,尺寸相同,只是看起来很难重新调整 - 与滚动视图中的屏幕视图相比,文本看起来粗糙和差)

我的代码:(scrollView是我的NSScrollView对象)

NSData *pdf = [scrollView dataWithPDFInsideRect:[scrollView bounds]];
NSImage *image = [[NSImage alloc] initWithData:pdf];

NSImageView *imageView = [[NSImageView alloc] initWithFrame:[scrollView bounds]];
[imageView setImage: image];
[mainGUIPanel addSubview: imageView];

我尝试了一堆东西,用像素大小,边界混淆,使用IB创建目标NSView并将图像放在其中,但只是不能让图像看起来不坏 . 有任何想法吗?

编辑:我尝试将pdf数据写入pdf文件并查看它,看起来没问题 . 因此,位图图像正在被捕获,它只是在显示器上,看起来它有点缩放 .

Edit2:还尝试获取这样的位图:

NSBitmapImageRep *bitmap = [scrollView bitmapImageRepForCachingDisplayInRect:[scrollView bounds]];
[scrollView cacheDisplayInRect:[scrollView bounds] toBitmapImageRep:bitmap];

NSImage * image = [[NSImage alloc] initWithSize:[bitmap size]];
[image addRepresentation: bitmap];

相同的结果 - 位图看起来完全相同,不良并在显示时缩放 .

这让我相信捕获位图数据的方式可以正常工作,它创建视图并渲染正在进行缩放的图像 . 如何确保视图和图像以正确的大小和缩放显示?

编辑3:好的,我开始了一个新的空白项目并设置了它,它完美地工作 - 新的imageview与抓取的位图相同 . 所以我怀疑在将位图绘制到视图时,我的问题源于一些渲染/合成问题 . 进一步调查......

事实证明问题源于我正在渲染的scrollView . 这有一个透明的背景(在IB中关闭Draw Background),文本是scrollView看起来不错 . 如果我使用透明背景颜色打开“绘制背景”,则文本呈现得非常糟糕,就像我以编程方式捕获图像时一样 .

因此,在我的应用程序中,即使关闭“绘制背景”,也会捕获scrollView图像,就像启用“绘制背景”一样 . 所以我需要理解为什么当Draw Background打开并且设置为透明时文本被渲染得很糟糕,希望这会引导我找到解决方案 .

还尝试创建一个关闭背景绘图的NSClipview并将位图视图放入其中,但它的渲染方式相同 . 我找不到一种方法将透明图像渲染到屏幕上而没有可怕的伪影 .

1 回答

  • 1

    好的,我找到了解决方案 . 而不是获取透明背景scrollview对象本身,而是获取父视图(主要是窗口背景)的抓取,并将边界限制为scrollview对象的大小 .

    这将捕获滚动视图的背景和内容,并正确显示而不会出现任何透明问题 .

相关问题