在
Cocoa应用程序中,我想在NS
ImageView中显示一个2d浮点数组.为了使代码尽可能简单,首先将数据从float转换为NSData:
// dataArray: an Nx by Ny array of floats
NSMutableData *nsdata = [NSMutableData dataWithCapacity:0];
long numPixels = Nx*Ny;
for (int i = 0; i < numPixels; i++) {
[nsdata appendBytes:&dataArray[i] length:sizeof(float)];
}
现在尝试显示数据(显示为空白):
[theNSImageView setImage:[[NSImage alloc] initWithData:nsdata]];
这是正确的方法吗?首先需要CGContext吗?我希望用NSData实现这一目标.
我已经注意到早期的Stack帖子:32 bit data,close but in reverse,almost worked but no NSData,color image data here,但是对于这些工作的变化并没有多少运气.谢谢你的任何建议.
最佳答案 您可以使用NSBitmapImageRep来构建NSImage float-by-float.
有趣的是,其中一个初始化程序在Cocoa中具有最长的方法名称:
- (id)initWithBitmapDataPlanes:(unsigned char **)planes
pixelsWide:(NSInteger)width
pixelsHigh:(NSInteger)height
bitsPerSample:(NSInteger)bps
samplesPerPixel:(NSInteger)spp
hasAlpha:(BOOL)alpha
isPlanar:(BOOL)isPlanar
colorSpaceName:(NSString *)colorSpaceName
bitmapFormat:(NSBitmapFormat)bitmapFormat
bytesPerRow:(NSInteger)rowBytes
bitsPerPixel:(NSInteger)
至少它已有详细记录.通过在平面中提供浮点数组来构建它之后,您就可以将NSImage放入视图中:
NSImage *image = [[NSImage alloc] initWithCGImage:[bitmapImageRep CGImage] size:NSMakeSize(width,height)];
或者,稍微清洁一点
NSImage *image = [[[NSImage alloc] init] autorelease];
[im addRepresentation:bitmapImageRep];
有一个初始化器只使用NSData容器:
+ (id)imageRepWithData:(NSData *)bitmapData
虽然这取决于你的bitmapData包含一个正确的位图格式.