#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)
копировать байты или использовать их на месте?