Существует ли не осуждаемая инфраструктура растровой графики для Mac OS X?
Я ищу каркас с растровой графикой для Mac OS X. В частности, я хочу какой-то вид, которым я могу манипулировать (по крайней мере концептуально) как матрица пикселей. Моя программа будет генерировать данные пикселей программно.
QuickDraw хорошо подходит под это описание, но не рекомендуется. Насколько я могу судить, в Core Graphics нет ничего эквивалентного. Я что-то пропустил?
Простая C-среда предпочтительнее Objective-C, но я не слишком суетлив.
4 ответа
QD устарела, потому что не существует способа сделать это эффективно с нынешним поколением полностью составных интерфейсов и графического процессора. По этой причине в системе нет ничего похожего на QD, и не будет. Разрешение прямого доступа к резервному хранилищу в лучшем случае приводит к гораздо большему количеству транзакций шины в и из графического процессора, а в худшем случае может помешать загрузке текстуры на саму карту, а в некоторых случаях может привести к сбоям программного обеспечения.
Понятно, что иногда есть причины, по которым людям нужен доступ на уровне пикселей к бэк-хранилищу, поэтому есть некоторые механизмы, чтобы сделать это, но реальных удобных способов не существует, и если вы можете найти какой-то способ избежать этого, вам следует. Если вы не можете избежать этого, вы можете использовать CoreGraphics для создания растрового контекста, используя CGBitmapContextCreate, где у вас есть доступ к резервному хранилищу и вы можете напрямую управлять резервным хранилищем. Работать не просто, а медленно.
Как насчет того, чтобы разделить ширину и высоту вида отдельно, а затем нарисовать ширину x высоту квадратов? Вы можете просто использовать NSPoint и увеличивать его на единицу, пока он не достигнет ширины x высоты.
Простой Directmedia Layer имеет пиксельный доступ. Это может быть слишком много, поскольку это библиотека переноса, но весь API-интерфейс написан на простом языке C. Я не знаю, что он использует в качестве базового API-интерфейса MacOS. Лучше всего проверить веб-сайт, чтобы увидеть, подходит ли он для ваших целей.
Кроме того, вы можете использовать текстуры OpenGL.
Лучший способ сделать это - Core Image. Он предназначен для работы с пикселями и очень быстр, потому что позволяет выполнять работу с графической картой.