Создание NSImage из 2d массива целых - PullRequest
0 голосов
/ 30 января 2019

Привет, я работаю над программой для загрузки DICOM-файлов (формат медицинских файлов для изображений) и отображения их в приложении Mac OS Cocoa.Я кодирую в C # с использованием Visual Studio.

Я дошел до того, что я могу сделать 2-мерный массив целых, представляющих интенсивность, нет цвета.

Я не знаю, как сделатьэто в NSImage, чтобы я мог использовать его в качестве изображения в какао.

Предложения?

1 Ответ

0 голосов
/ 31 января 2019

Существует множество способов сделать это, в зависимости от ваших потребностей, но «современный» метод - использовать фабричный метод класса NSImage:

+ (instancetype)imageWithSize:(NSSize)size flipped:(BOOL)drawingHandlerShouldBeCalledWithFlippedContext drawingHandler:(BOOL (^)(NSRect dstRect))drawingHandler;

Этот метод принимает параметр блока с кодом, который превращает ваши данные в изображение, так же, как если бы вы рисовали его на экране для пользовательской реализации NSView.(Если вы никогда не делали этого раньше, начните с Руководство по рисованию какао: «Виды и рисование» , а также «Графические контексты» .

Заводской методявляется умным и (если разрешение вашего экрана не изменится) будет вызываться только один раз, а полученное изображение будет кэшировано в представлении NSImage.

Следующая альтернатива (которая на самом деле может быть проще для вас) должен преобразовать ваш массив int в буфер RGBA (или любой другой), представляющий значения пикселей в изображении. Этот процесс начинается с создания определенного NSBitmapImageRep (это объект «представления» - каждый NSImage являетсянабор из одного или нескольких представлений).

Это потребует некоторых исследований различных форматов пиксельного буфера, но это также довольно легко сделать. После того, как вы построили свое 2D-представление буфера пикселей, вы можете повернуть это непосредственнов NSImage.

Эти и другие методы объясняются в Руководстве по рисованию какао: «Создание объектов NSImage» .

...