NSImage из массива байтов

#cocoa #monomac

#cocoa #monomac

Вопрос:

Я пытаюсь отобразить изображение в NSImageView с изображением, содержащимся в массиве байтов. Как я могу это сделать? Насколько я понимаю, мне нужно преобразовать мой byte [] в переменную NSData и передать ее в NSImage. Это правильно? Как мне это сделать? Я пробовал кастинг, но это не сработало, и, похоже, никакого встроенного преобразования не предусмотрено…

Я попробовал следующее:

Кастинг:

 NSData bytesAsMacVariable = (NSData) imageAsBytes;
  

Также пробовал

 NSData bytesAsMacVariable = imageAsBytes as NSData;
  

Наконец, попытался передать byte[], как если бы это были NSData.

 NSImage imageToShow = new NSImage(imageAsBytes);
  

Ни один из них не будет работать, и, насколько я вижу, ни в NSImage, ни в NSData нет функции-члена, которая принимает byte[] для преобразования…

Комментарии:

1. Пожалуйста, отредактируйте свой вопрос и вставьте код, который вы пробовали. В общем, то, что вы описали, верно.

Ответ №1:

Вы приводите к объектному типу, но вы должны привести к типу указателя на объект.
Попробуйте что-нибудь более похожее

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

Указатели очень важны.

Комментарии:

1.@Robin также обратите внимание, что, если гарантированно, что массив байтов не исчезнет, вы можете оптимизировать NSData, используя один из NSData ...WithBytesNoCopy: методов. — и здесь, вероятно, все в порядке, даже если byteArray не будет сохраняться, поскольку NSImage предположительно, данные все равно копируются из NSData .

Ответ №2:

Вы можете использовать NSMutableData, например, так:

 new NSImage (new NSMutableData (imageAsBytes));
  

Комментарии:

1. Концептуально, это то же самое, что я опубликовал, но какой язык вы используете, где это допустимый и осмысленный синтаксис?

2. Вопрос был помечен как monomac и cocoa, который является привязкой mono для разработки cocoa / mac. Исходный синтаксис — C #.

3. будет new NSMutableData(imageAsBytes) копировать байты или использовать их на месте?