从NSData中显示NSImage

4

我的目标是在视图中显示一张图片。 考虑到我有:

  • IBOutlet NSImageView *image 用于显示我的图片
  • NSData *imageData 用于读取图片文件
  • NSImage *imageView

图像数据存储在imageData中(我使用了initWithContentsOfFile方法)。

现在,如果我使用以下方式初始化imageView:

NSImage *imageView = [[NSImage alloc] initWithContentsOfFile:path];

我可以正确地看到图像的呈现,但这样做会从文件系统中读取两次。
如果我尝试:
NSImage *imageView = [[NSImage alloc] initWithData:imageData];

显示的图像非常小,像缩略图。

使用CGImageRef:

CGImageSourceRef imageSource = CGImageSourceCreateWithData((CFDataRef)imageData, NULL);
CGImageRef imageRef= CGImageSourceCreateImageAtIndex(imageSource, 0, nil);
NSImage *imageView = [[NSImage alloc] initWithCGImage:imageRef size:NSZeroSize];

图片渲染得太小了,如何以原始分辨率显示图片?

我已经编辑了我的帖子:添加了图像源。 - Matteo
我有一个NSData用于读取exif标签。 - Matteo
@Joe Blow:我认为改变dpi可能不是解决方案。原始分辨率约为2800x1300,结果为100x70左右。 - Matteo
我遇到了同样的问题。我正在使用从URL连接检索到的数据初始化我的NSImage。它们显示比在Web浏览器中看到的要小。你找到解决方法了吗? - Arlen Anderson
还没有..我还在寻找解决方案。如果你能修复这个问题,请在这里发布解决方案。谢谢。 - Matteo
显示剩余3条评论
1个回答

5
NSImage *imageView = [[NSImage alloc] initWithData:(NSData *)imageData];

谢谢您的回复。我会尽快尝试并反馈给您。 - Matteo
抱歉回复晚了。当我将您的代码粘贴到我的项目中时,编译器会显示“错误:语义问题:未知接收器'UIImage'; 您是否指的是'CIImage'?”如果我将UIImage更改为CIImage,则编译器会告诉我“警告:语义问题:不兼容的指针类型初始化'NSImage *'与类型表达式'CIImage *'”,如果我尝试运行编译器,则会显示“x86_64体系结构的未定义符号:“OBJC_CLASS$_CIImage”,引用自:ButtonsAppDelegate.old中的objc-class-ref:找不到符号(s)clang:错误:链接器命令失败,退出代码1”。 - Matteo
1
将UIImage更改为NSImage。他可能是不小心打错了。 - tallen11
NSImage没有imageWithData方法。 - Vibhor Goyal
在我的Mavericks上运行得非常好。实际代码证明:https://github.com/HermesApp/Hermes/commit/19302fdbc2e7a8503bb34912aa567a134dc4a1f3 - Winny
1
代码示例已经更正,之前有一个拼写错误,应该是initWithData:而不是imageWithData:。 - Duncan Babbage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接