【问题标题】:NSImage from byte array来自字节数组的 NSImage
【发布时间】:2011-04-16 23:57:49
【问题描述】:

我正在尝试在 NSImageView 中显示图像,图像包含在 Byte 数组中。我怎样才能做到这一点?据我了解,我需要将我的 byte[] 转换为 NSData 变量并将其提供给 NSImage。这个对吗?我该怎么做?我试过投射,但不起作用,而且似乎没有内置任何转换......

我尝试了以下方法:

选角:

NSData bytesAsMacVariable = (NSData) imageAsBytes;

也试过了

NSData bytesAsMacVariable = imageAsBytes as NSData;

最后,尝试将 byte[] 当作 NSData 一样传递。

NSImage imageToShow = new NSImage(imageAsBytes);

这些都不起作用,据我所知,NSImage 或 NSData 都没有接受 byte[] 进行转换的成员函数...

【问题讨论】:

  • 请编辑您的问题并粘贴您尝试过的代码。总的来说,您所描述的是正确的。

标签: cocoa monomac


【解决方案1】:

您正在转换为对象类型,但您应该转换为 pointer-to-object 类型。
尝试类似的东西

NSData *imageData = [NSData dataWithBytes:byteArray length:arrayLength];
NSImage *image = [[NSImage alloc] initWithData:imageData];
[imageView setImage:image];
[image release];

指针很重要。

【讨论】:

  • @Robin 还请注意,如果保证字节数组不会消失,您可以使用 NSData ...WithBytesNoCopy: 方法之一优化 NSData。 -- 即使byteArray 不会持续存在,这里也可能没问题,因为NSImage 可能会从NSData 中复制数据。
【解决方案2】:

您可以像这样使用 NSMutableData:

new NSImage (new NSMutableData (imageAsBytes));

【讨论】:

  • 从概念上讲,这与我发布的内容相同,但是您使用的语言是有效且有意义的语法?
  • 问题被标记为 monomac 和 cocoa,这是 cocoa/mac 开发的单声道绑定。源语法是 C#。
  • new NSMutableData(imageAsBytes) 会复制字节还是就地使用它们?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多