gpt4 book ai didi

macos - 试图转动 [NSImage imageNamed :NSImageNameUser] into NSData

转载 作者:行者123 更新时间:2023-12-03 16:06:36 25 4
gpt4 key购买 nike

如果我通过以下方式创建 NSImage:

NSImage *icon = [NSImage imageNamed:NSImageNameUser];

它只有一种表示,一个 NSCoreUIImageRep ,它似乎是一个私有(private)类。

我想将此图像存档为 NSData 但如果我要求 TIFFRepresentation 我会得到一个当我最初创建的真实 NSImage 似乎是矢量并且会放大以很好地填充我的 ImageView 时,小图标。

我有点希望通过这种方式制作的图像能够有一个我可以使用的 NSPDFImageRep

有什么想法我如何获得此NSImageNSData(首选矢量版本或更糟糕的是大规模位图版本)?

更新

与一些人交谈on Twitter他们认为这些图像的真正来源是多分辨率 icns 文件(可能根本不是矢量)。我无法在磁盘上找到这些文件的位置,但听听还是很有趣。

此外,他们建议我创建系统 NSImage 并手动将其渲染为我自己的高分辨率 NSImage。我现在正在这样做,它可以满足我的需求。我的代码:

+ (NSImage *)pt_businessDefaultIcon
{
// Draws NSImageNameUser into a rendered bitmap.
// We do this because trying to create an NSData from
// [NSImage imageNamed:NSImageNameUser] directly results in a 32x32 image.
NSImage *icon = [NSImage imageNamed:NSImageNameUser];
NSImage *renderedIcon = [[NSImage alloc] initWithSize:CGSizeMake(PTAdditionsBusinessDefaultIconSize, PTAdditionsBusinessDefaultIconSize)];
[renderedIcon lockFocus];
NSRect inRect = NSMakeRect(0, 0, PTAdditionsBusinessDefaultIconSize, PTAdditionsBusinessDefaultIconSize);
NSRect fromRect = NSMakeRect(0, 0, icon.size.width, icon.size.width);;
[icon drawInRect:inRect fromRect:fromRect operation:NSCompositeCopy fraction:1.0];
[renderedIcon unlockFocus];

return renderedIcon;
}

(试图将此作为我的答案,但我没有足够的声誉?)

最佳答案

您似乎忽略了文档。您的两个主要问题都在那里得到解答。 Cocoa Drawing Guide (从 NSImage API 引用链接的配套指南)有一个图像部分,您确实需要仔细阅读并在遇到代表/缓存/大小调整/质量问题时引用。

...if I ask for the TIFFRepresentation I get a small icon when the real NSImage I originally created seemed to be vector and would scale up to fill my image views nicely.

此问题的图像部分的相关小节是:如何选择图像表示、图像和缓存以及图像大小和分辨率。默认情况下,TIFF 图像的 -cacheMode 的行为就像 NSImageCacheBySize 设置生效一样。此外,对于内存中的缩放/大小调整操作,-imageInterpolation 也很重要:“表 6-4 列出了可用的插值设置。”和“NSImageInterpolationHigh - 更慢,更高质量的插值。”

我相当确定这适用于命名系统镜像以及任何其他镜像。

I was kinda hoping images made [ by loading an image from disk ] would have a NSPDFImageRep I could use.

相关小节:图像表示。 “...使用基于文件的图像,您创建的大多数图像只需要单个图像表示。”和“但是,您可能会在以下情况下创建多个表示形式:为了打印,您可能需要创建图像的 PDF 表示形式或高分辨率位图。”

您将获得适合加载图像的表示形式。例如,您必须为 TIFF 图像创建 PDF 表示形式。要以高分辨率执行此操作,您需要返回到缓存模式,以便获得更高分辨率的项目。

由于图像/创建机制/设置/以及您想要用它们做什么的大量排列,有太多的细节无法列出。我的帖子旨在提供一般指南,帮助您找到适合您的情况所需的具体信息。

有关更多详细信息,请添加具体细节:您尝试使用的代码、您正在加载或创建的图像类型 - 您似乎在第四段中提到了两种不同的可能性 - 以及出了什么问题。

关于macos - 试图转动 [NSImage imageNamed :NSImageNameUser] into NSData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7665247/

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