2013-07-11 3 views
1

Я заинтересован в создании подкласса NSImageRep, который может хранить значения двойной точности. Стандартный NSBitmapImageRep может содержать одиночные прецизионные поплавки, но дроссели удваиваются. Мне нравится, что NSBitmapImageRep предоставляет буфер данных для манипуляции, и я хотел бы сохранить возможность манипулировать данными на месте, а не манипулировать отдельным буфером, который мне нужно будет преобразовать в изображение для отображения.Как реализовать -draw для пользовательского подкласса NSImageRep

Я думаю, что подклассы довольно прямолинейны, за исключением того, что я не уверен, как обращаться с самой основной частью: рисовать изображение. В документации есть -draw как метод, который мне нужно реализовать, что имеет смысл, но каков наилучший способ рисовать растровое изображение?

Я видел один колеблющийся предложение нарисовать много маленьких прямоугольников, по одному на пиксель предположительно: How to Implement Custom Image representation for NSImage

есть более эффективный подход? Я посмотрел и не могу найти обработанный пример пользовательского NSImageRep с растровыми данными - большинство примеров используют векторные данные.

Также мне интересно, что метод реализации - это просто -draw, а не любая форма ограниченного розыгрыша. Есть ли способ определить, из какой текущей области отсечения находится NSImageRep или что-то, чтобы избежать рисования частей изображения, которые не нужны?

ответ

1

Я уверен, что вы нашли решение для этого сообщения, но вот мои выводы, если вы все еще заинтересованы.

То, что я обнаружил при реализации моего собственного NSImageRep, заключается в том, что существует много неэффективных способов его выполнения и что вам необязательно реализовывать только совершенно простой метод -(BOOL)draw. Если вы предоставите реализацию -(BOOL)drawInRect:, она будет использоваться в большинстве случаев. Фактически, в моем подклассе NSImageRep я еще не видел -(BOOL)draw, вызываемого при наличии -(BOOL)drawInRect:.

Для фактического рисования я использовал Core Graphics, которая позволяет создавать изображения из необработанных данных и рисовать их с большим контролем и точностью, причем все это происходит очень быстро. Мое представление все еще довольно грубое, но оно быстро даже при работе с большими изображениями.

Весь предмет не хватает документации, вероятно, из-за отсутствия необходимости в дополнительных представлениях за пределами старых стандартов (TIFF, PNG, JPEG и т. Д.). Это довольно сложно делать исследования, поэтому, если я получу время, я увижу, как писать блог, подробно описывая все, с чем я столкнулся.

+0

Если это ответит на ваш вопрос, отметьте его как принятый. – Alexander