Как да внедрим -draw за персонализиран подклас NSImageRep

Интересувам се от създаването на подклас NSImageRep, който може да съдържа стойности с двойна точност. Стандартният NSBitmapImageRep може да поддържа плаващи числа с единична точност, но се задушава при двойни. Харесва ми, че NSBitmapImageRep излага буфера за данни за манипулиране и бих искал да запазя възможността да манипулирам данните на място, вместо да манипулирам отделен буфер, който ще трябва да конвертирам в изображение за показване.

Мисля, че подкласирането е доста лесно, освен че не съм сигурен как да се справя с най-основната част: рисуване на изображението. Документацията изброява -draw като метод, който трябва да внедря, което има смисъл, но кой е най-добрият начин за рисуване на растерно изображение?

Видях едно колебливо предложение да нарисувам много малки правоъгълници, вероятно по един на пиксел: Как да внедрите персонализирано представяне на изображение за NSImage

Има ли по-ефективен подход? Разгледах и не мога да намеря работещ пример за персонализиран NSImageRep с растерни данни - повечето примери използват векторни данни.

Също така намирам за интересно, че методът за прилагане е просто -draw, а не каквато и да е форма на ограничено чертане. Има ли начин да се определи какъв е текущият регион на изрязване от NSImageRep или нещо, за да се избегне рисуването на части от изображението, които не са необходими?


person Omegaman    schedule 11.07.2013    source източник


Отговори (1)


Сигурен съм, че сте намерили решение за тази публикация до този момент, но ето моите открития, ако все още се интересувате.

Това, което открих при внедряването на моя собствен NSImageRep е, че има много неефективни начини да го направите и че не е задължително да прилагате само крайно простия метод -(BOOL)draw. Ако предоставите реализация на -(BOOL)drawInRect:, тя ще се използва вместо това в повечето случаи. Всъщност в моя подклас NSImageRep все още не съм виждал -(BOOL)draw да се извиква, когато -(BOOL)drawInRect: присъства.

За действителното чертане използвах Core Graphics, което ви позволява да създавате изображения от необработени данни и да ги рисувате с много контрол и прецизност, като същевременно е изключително бързо. Представянето ми все още е доста грубо, но е бързо дори когато се занимавам с големи изображения.

На цялата тема липсва документация, вероятно поради малка нужда от допълнителни представяния извън старите стандарти (TIFF, PNG, JPEG и т.н.). Доста е разочароващо да се прави проучване, така че ако имам време, ще се погрижа да напиша публикация в блога, описваща всичко, на което съм се натъквал.

person John Wells    schedule 22.06.2014