Если все, что вы хотите сделать, это нарисовать свой формат изображения и не особенно заботиться о том, чтобы снова вытащить его из своего приложения, лучше всего забыть о создании подкласса NSImageRep
и просто создать NSBitmapImageRep
снемного глубины и размеров, соответствующих вашему изображению.Затем вы запрашиваете у него значение -bitmapData
.
, которое даст вам необработанный буфер, к которому вы можете обратиться напрямую, и затем вы буквально скопируете каждый из пикселей вашего изображения один за другим в соответствующие места.в буфере.
Если вы действительно хотите использовать пользовательский NSImageRep
, тогда все, что вам нужно сделать, это подкласс NSImageRep
, а затем в вашем методе initWithData:
вы сохраните данные изображения в ivar изатем вызовите все различные методы, чтобы сообщить представителю изображения, как он должен быть сконфигурирован, например -setBitsPerSample:
, -setPixelsHigh:
и т. д. Документация для класса NSImageRep
объясняет, какие методы следует вызывать при инициализации изображения.
Для реализации -draw
вам буквально нужно нарисовать ваши пиксели в текущем контексте.Очевидно, то, как вы это сделаете, зависит от типа изображения, которое вы рисуете (например, векторный формат будет иметь совсем другой код для рисования, чем растровый).
Один из способов нарисовать растровое изображение - это циклический просмотр.пиксели и вызовите NSRectFill()
с прямоугольником размером в один пиксель для каждого пикселя, что довольно быстро, хотя и не особенно эффективно.
Однако вам будет лучше создать NSBitmapImageRep
и манипулироватьпикселей в контексте растрового изображения (возвращается из -bitmapData
) напрямую.Затем вы можете просто нарисовать CGImageRep
, который вы можете получить из NSBitmapImageRep
.Если вы создадите NSBitmapImageRep
в своем методе initWithData:
, вам нужно будет назначить пиксели только один раз.