gpt4 book ai didi

objective-c - CALayer 中多页 TIFF NSImage 的自动缩放

转载 作者:太空狗 更新时间:2023-10-30 03:38:23 37 4
gpt4 key购买 nike

问题:我有一张多页 TIFF 图像(使用 tiffutil 生成),其中包含从 256x128 像素一直到 4096x2048 像素的多个像素尺寸的相同图像。我想在 CALayer 中显示此图像,以便系统根据层的大小自动选择图像的最佳表示。目前,该层始终使用图像的 256x128 表示,无论其大小如何。

我是这样做的:我加载图像

NSImage *image = [NSImage imageNamed:@"map-multipage.tiff"];

记录 image 对象确认它包含多个具有不同像素大小的表示,但所有表示的点大小相同 (256x128)。据我所知,这就是 Apple 推荐构建多分辨率图像的方式。

NSLog(@"%@", image);

<NSImage 0x100623060 Name=map-multipage Size={256, 128} Reps=(
"NSBitmapImageRep 0x10064d330 Size={256, 128} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=256x128 Alpha=NO Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x10014fdb0",
"NSBitmapImageRep 0x10064e1b0 Size={256, 128} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=512x256 Alpha=NO Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x10014fdb0",
...
"NSBitmapImageRep 0x100530bd0 Size={256, 128} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=4096x2048 Alpha=NO Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x10014fdb0"
)>

然后我将 NSImage 实例直接分配给图层的 contents 属性:

self.layerView.layer.contents = image;

如前所述,结果是图层使用第一个表示 (256x128 像素) 来显示图像,而不管图层的大小(以点或像素为单位)。

当我将相同的图像分配给 NSImageView 时,它按预期工作。 ImageView 根据其大小透明地选择最佳图像表示。我希望 CALayer 会以相同的方式工作,但显然情况并非如此。任何人都可以确认 CALayer 不支持这种自动选择还是我做错了什么?

(请注意,这个问题与 HiDPI/Retina 图形没有直接关系。事实上,如果我将图层移动到 HiDPI 模式下的显示器,它确实渲染得更锐利一点,表明它现在使用第二个位图表示( 512x256 px) 用于渲染。这表明在 HiDPI 显示器上自动选择更高分辨率的工作有效,而最佳位图表示的基本选择失败。)

最佳答案

似乎 AppKit 方法 -[CALayer setContents:] 选择大小匹配的位图表示 -[contents size] 如果 contents对象是 NSImage。然后选择的位图按原样使用,直到再次调用 -[CALayer setContents:]

关于objective-c - CALayer 中多页 TIFF NSImage 的自动缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11188500/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com