У меня есть структура, которая включает указатель на набор данных, который в данном случае представляет собой 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-> image к объекту данных, но я не понимаю, как передать структуру массива объекту данных. Есть идеи?
Спасибо
БОЛЬШЕ попыток использовать ваше предложение
Я могу преобразовать эти данные в файл .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 байта на пиксель, или что-то подобное? Спасибо Монти Вуд