Обзор vImage

vImage является двухмерным изображением, обрабатывающим платформу. Часть Ускорять Платформы, vImage обеспечивает, оптимизированные подпрограммы для функций, таких как изображение фильтрует, scalings, отражения и вращения. В то время как его функции совместно используют несколько общностей с другими платформами обработки изображений, такими как Базовое Изображение, что различает, vImage от остальных - то, что оно использует векторизованный код. Если Ваш код работает на процессоре G5, vImage использует в своих интересах AltiVec. Если это работает на основанном на Intel Mac, vImage использует SSE. При работе архитектуры G3 (который не обладает векторным процессором), он будет все еще работать, только без векторной оптимизации. Путем использования в своих интересах CPU’s встроенный векторный процессор, vImage является самой быстрой доступной платформой обработки изображений с OS X v.10.5.

Когда использовать vImage

Если обработка изображений в реальном времени является потребностью в Вашем приложении, необходимо использовать vImage. Обязательно используйте временные буферы, когда доступно, чтобы избежать блокировать на вызовах к malloc().

Кроме применения эффектов к изображениям, vImage является также подходящим для приложений, требующих непротиворечивых, совместимых стандартами арифметических результатов.

Вообще говоря, vImage является средством экономии времени, но существуют определенные затраты, связанные с использованием специализированного векторного процессора и кэшей данных для обработки изображений. Например, это не было бы практично для использования vImage для обработки единственной, фотографии среднего размера. В то время как vImage совершенно способен к выполнению такой обработки, ее преимущество находится в обработке изображений в режиме реального времени или повторении работы последовательно. Если Вы не имеете дело с большими, изображениями с высокой разрешающей способностью, базовое Изображение является лучшим выбором.

Поскольку vImage является чистой платформой C, нет никаких классов для отслеживания, только функции, форматы изображения и типы данных. Все функции vImage начинаются со слова «vImage» сопровождаемый именем работы. Некоторые функции также имеют подчеркивание (“_ “) на их имена. Символы, следующие за подчеркиванием обычно, указывают формат изображения, на который работает функция.

Форматы изображения, Доступные в vImage

vImage поддерживает несколько форматов изображений. Форматы изображения являются спецификациями для того, как пиксельные данные представлены в памяти. Форматы файла образа являются определенными типами файлов (такими как JPG, PNG, GIF и TIFF) раньше обменивался данными изображения между программами и хранил их на жестком диске. Платформам нравится Изображение, I/O помогает Вам в загрузке различных форматов файла образа от диска и использования их в памяти. В памяти изображения сохранены как двухмерные антенные решетки интенсивностей пикселей (типа int или float). Существует один пиксель в массиве для каждого пикселя в изображении.

Форматы изображения являются или планарными или чередованы. Планарный формат изображения хранит данные изображения так, чтобы данные для каждого канала (плоскость) были в отдельном буфере. Например, типичное планарное изображение имело бы отдельные буферы для красных, зеленых, синих, и альфа-каналов. Чередованный формат изображения хранит данные изображения так, чтобы чередовались данные от каждого пикселя: ARGBARGBARGB...

Значения данных для изображений могут быть целым числом или с плавающей точкой. В vImage форматы изображения, использующие целочисленные значения, представляют уровень яркости как 8-разрядное значение без знака. Значения могут колебаться от 0 до 255, включительно, с 255 указывающей полной интенсивностью и 0 никакой интенсивностью. Форматы изображения, использующие значения с плавающей точкой обычно, используют значения в диапазоне 0,0 (самая низкая интенсивность) к 1,0 (полная интенсивность). Однако vImage не осуществляет это ограничение диапазона и не отсекает вычисленные значения, лежащие вне этого диапазона.

vImage использует следующие форматы изображения для своих базовых операций:

Можно также использовать vImage для обработки изображений в других форматах первым преобразованием их к одному из базовых форматов изображения vImage. Например, Вы могли взять изображение, определенное с помощью 16-разрядных пикселей, и преобразовать его в 32-разрядный формат пикселя, поддерживаемый vImage использование функции преобразования как vImageConvert_16SToF. Эти функции могут помочь Вам преобразовать изображения в и от не поддерживаемые форматы и поддерживаемые:

Типы данных и 64-разрядная обработка

Начиная с версии 10.4 OS X поддерживает 64-разрядное обращение для тех приложений, скомпилированных для 64-разрядной архитектуры. vImage платформа исходно поддерживает 64-разрядную архитектуру, что означает, что все функции vImage, доступные в OS X v10.4 и позже, доступны и для 32-разрядных и для 64-разрядных приложений. 32-разрядные приложения будут продолжать работать как всегда. Для 64-разрядных процессоров vImage принимает изображения с буферами, более крупными, чем 4 gigapixels широких или высокие (или оба), и передает данные с 64-разрядными указателями.

vImage использует несколько непрозрачных типов данных для упрощения обрабатывающих необработанных данных изображения. Большинство типов данных является просто определениями типов для int или float массивы. Если Вы пишете совместно использованный исходный код, предназначающийся и для 32-разрядной и 64-разрядной архитектуры, необходимо быть осторожны относительно использования типов с vImage. Некоторые типы в vImage изменяют размер между этими двумя архитектурой, прежде всего vImage_Error, size_t, vImagePixelCount, что-либо с типом long или unsigned long, и конечно, указатели. Эти типы составляют 64 бита в 64-разрядной архитектуре и 32 бита для 32-разрядной архитектуры. Необходимо удостовериться, что собственные типы растут и уменьшаются соответственно для предотвращения усечения. Необходимо соблюдать особую осторожность о данных, которые могли бы быть переданы между архитектурой, такой как данные, хранившие к диску, или отправили по сети. См. vImage Ссылку Типов данных и Констант для получения дополнительной информации.

Для получения дополнительной информации о 64-разрядном программировании в OS X посмотрите 64-разрядное Руководство по Переходу.