Как реализовать -draw для пользовательского подкласса NSImageRep
Я заинтересован в создании подкласса NSImageRep, который может содержать значения двойной точности. Стандартный NSBitmapImageRep может содержать плавающие одинарной точности, но удушает удвоения. Мне нравится, что NSBitmapImageRep предоставляет буфер данных для манипуляции, и я хотел бы сохранить возможность манипулировать данными на месте, а не управлять отдельным буфером, который мне нужно будет преобразовать в изображение для отображения.
Я думаю, что подклассы довольно просты, за исключением того, что я не уверен, как справиться с самой основной частью: рисование изображения. В документации перечисляются -draw как метод, который мне нужно реализовать, что имеет смысл, но как лучше всего нарисовать растровое изображение?
Я видел одно нерешительное предложение нарисовать много маленьких прямоугольников, по одному на пиксель: как реализовать представление пользовательских изображений для NSImage
Есть ли более эффективный подход? Я посмотрел и не могу найти работающий пример пользовательского NSImageRep с растровыми данными - в большинстве примеров используются векторные данные.
Кроме того, мне интересно, что реализуемый метод - просто -draw, а не какая-либо форма ограниченного рисования. Есть ли способ определить текущую область отсечения внутри NSImageRep или что-то, чтобы избежать рисования частей изображения, которые не нужны?
1 ответ
Я уверен, что к этому моменту вы нашли решение для этого поста, но вот мои выводы, если вы все еще заинтересованы.
Что я нашел в реализации моего собственного NSImageRep
в том, что есть много неэффективных способов сделать это, и что вам не обязательно реализовывать только совершенно простые -(BOOL)draw
метод. Если вы предоставляете реализацию -(BOOL)drawInRect:
, он будет использоваться вместо этого в большинстве случаев. На самом деле, по моему NSImageRep
подкласс, я еще не видел -(BOOL)draw
вызывается когда -(BOOL)drawInRect:
настоящее.
Для реального рисования я использовал Core Graphics, которая позволяет вам создавать изображения из необработанных данных и рисовать их с большим контролем и точностью, при этом будучи чрезвычайно быстрым. Мое представление все еще довольно грубое, но оно быстрое даже при работе с большими изображениями.
В целом предмету явно не хватает документации, вероятно, из-за небольшой необходимости в дополнительных представлениях за пределами старых стандартов (TIFF, PNG, JPEG и т. Д.). Довольно печально проводить исследования, поэтому, если у меня будет время, я увижу, как написать пост в блоге с подробным описанием всего, с чем я столкнулся.