【发布时间】:2014-04-12 22:07:47
【问题描述】:
我想创建一个 NSScrollView 对象的 NSImage,这样我就可以将平面图形用于动画目的。
当我将滚动视图对象渲染为图形并将其添加回我的窗口时,它可以工作,但看起来非常糟糕,就像它已缩放到 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 文件并查看它,它看起来还不错。所以位图图像正在被捕获,它只是在显示器上看起来像是被缩放了一些。
编辑2: 还尝试像这样获取位图:
NSBitmapImageRep *bitmap = [scrollView bitmapImageRepForCachingDisplayInRect:[scrollView bounds]];
[scrollView cacheDisplayInRect:[scrollView bounds] toBitmapImageRep:bitmap];
NSImage * image = [[NSImage alloc] initWithSize:[bitmap size]];
[image addRepresentation: bitmap];
相同的结果 - 位图在显示时看起来完全一样,糟糕且缩放。
这让我相信无论以哪种方式捕获位图数据都可以正常工作,它正在创建视图并渲染正在执行缩放的图像。如何确保视图和图像以正确的大小和比例显示?
编辑3: 好的,我开始了一个新的空白项目并进行了设置,它运行良好 - 新的图像视图与抓取的位图相同。所以我怀疑我的问题源于将位图绘制到视图时的一些渲染/合成问题。进一步调查...
事实证明,问题源于我正在渲染的滚动视图。这有一个透明的背景(在 IB 中绘制背景是关闭的)并且文本是滚动视图看起来不错。如果我使用透明背景颜色打开“绘制背景”,则文本呈现很糟糕,就像我以编程方式捕获图像时一样。
因此,在我的应用程序中,即使 Draw Background 关闭,scrollView 图像也会被捕获,就像 Draw Background 处于打开状态一样。因此,我需要了解为什么在“绘制背景”打开并设置为透明时文本呈现不佳的原因,希望这能引导我找到解决方案。
还尝试在关闭背景绘图的情况下创建一个 NSClipview 并将位图视图放入其中,但它仍然呈现相同的效果。如果没有可怕的伪影,我找不到将透明图像渲染到屏幕的方法。
【问题讨论】:
标签: macos cocoa scale nsimage nsimageview