我有一个包含指向数据集的指针的结构,在这种情况下是一个16位灰度图像。我想将此数据转换为NSImage,以便我可以显示它,然后将其另存为.TIF文件。手册中的路线似乎是:
(Create *myNSImData from frame->image, which is a pointer)
NSImage *TestImage = [[NSImage alloc] initWithData : myNSImData];
(display TestImage, save it, whatever else)
[TestImage release];
我迷失了如何创建NSData对象并确保它包含16位数据的数组。尝试重新设置指针会发出警告而没有数据。我可以简单地增加指针,一次从frame->图像传输一个字节到数据对象,但我不明白如何将数组结构传递给数据对象。有任何想法吗? 感谢
更多尝试使用您的建议 我可以通过以下方式将此数据转换为.TIF文件:
for (uint32 row = 0 ; row < MaxHeight ; row++)
{
for (uint32 column = 0;column< MaxWidth;column++)
{
tempData = (uint8_t)*frame->image; //first byte
*frame->image++;
buf[2 * column + 1] = (unsigned char) tempData;
tempData = (uint8_t)*frame->image; //second byte
*frame->image++;
buf[2 * column] = (unsigned char) tempData;
}
TIFFWriteScanline(tiffile,buf,row,0);
}
使用生成的.TIF文件,我可以创建一个NSImage并显示它:
NSImage *TestImage = [[[NSImage alloc] initWithContentsOfFile:inFilePath] autorelease];
[viewWindow setImage: TestImage];
我的问题现在变成了 - 我可以创建一个可以以相同方式显示的NSData对象吗?我尝试了以下(产品是图像的高度*宽度):
NSData *ReadImage = [[[NSData alloc] initWithBytes: frame->image length:2*product] autorelease] ;
NSImage *NewImage = [[[NSImage alloc] initWithData:ReadImage] autorelease];
NSSize newSize;
newSize.height = MaxHeight; //height of the image
newSize.width = MaxWidth; //width of the image
[NewImage setSize:newSize];
[viewWindow setImage: NewImage];
当我尝试这个时,没有任何显示。我也尝试创建一个包含数据的uint16_t数组,并提供指向它的指针 - 再次,没有任何显示。有任何想法吗?例如。我是否必须告诉NSData我每个像素使用2个字节,或类似的东西?谢谢蒙蒂伍德
答案 0 :(得分:0)
要创建包含指针块的NSData
对象,您应该使用以initWithBytes:
开头的三种方法之一,或创建自动释放的NSData
对象,使用以dataWithBytes:
更新:我认为如果您想直接从NSImage
创建NSData
,数据需要包含相应的标头/幻数,以便NSImage
可以找出什么代表是。您应该查看原始图像数据的NSBitmapImageRep
和Cocoa绘图指南的Images chapter。