Ускорьте Информацию о версии Платформы для OS X v10.9

Содержание:

vImage

vImage является высокоэффективной платформой для низкоуровневых операций обработки изображений. Это - подплатформа Accelerate.framework. Когда Вы соединяетесь для Ускорения, Вы добираетесь, vImage. vImage обеспечивает возможности, такие как размывание, передискретизация/изменение размеров изображения, граничное обнаружение, гистограммы, альфа-составление композита, цвет и преобразования формата изображения.

OS X.9 и iOS 7

vImage.framework был расширен с помощью нескольких главных новых функций:

Базовая графическая функциональная совместимость

Новый заголовок, vImage_Utilities.h, добавляется для обеспечения серии APIs для оптимизации обмена данными между vImage и остальной частью системы. Это обеспечивает ряд интерфейсов для быстро и легко обменные данные изображения с Базовой Графикой через преобразовывающие функции vImage_Buffer объекты к CGImageRef объекты и назад. Так как Базовая Графика предоставляет базовую поддержку для Какао и UIKit рисование примитивов, эти методы могут также привыкнуть к быстро и просто обменные пиксельные данные с ними Objective C APIs, включая многие форматы пикселя, не обычно поддерживаемые этим APIs, с помощью образующего мост APIs такой как imageWithCGImage:.

Новые типы

Новый тип добавляется для агрегации, несколько Базовых Графических типов обычно раньше описывали форматы изображения:

vImage_CGImageFormat
typedef struct {
    uint32_t                bitsPerComponent;
    uint32_t                bitsPerPixel;
    CGColorSpaceRef         colorSpace;
    CGBitmapInfo            bitmapInfo;
    uint32_t                version;
    const CGFloat           *decode;
    CGColorRenderingIntent  renderingIntent;
}vImage_CGImageFormat;

Значение этих полей совпадает с в CGImageCreate.

Новые функции:

Следующий APIs предоставлен, чтобы оптимизировать функциональную совместимость с Базовой Графикой, предусмотреть поверхностный импорт и экспорт vImage данных в форматы, такие как PNG и JPEG, и нарисовать на экран.

  • vImageBuffer_init

    Метод для оптимизации выделения vImage_Buffer.data с оптимально размерным rowBytes значение для производительности изображения.

  • vImageBuffer_initWithCGImage

    Инициализируйте a vImage_Buffer структура с данными от a CGImageRef.

  • vImageCreateCGImageFromBuffer

    Создайте a CGImageRef от a vImage_Buffer.

  • vImageBuffer_GetSize

    Функция удобства для возврата размера vImage_Buffer как CGSize. Не окружит.

  • vImageCGImageFormat_GetComponentCount

    Функция удобства для возврата числа цвета + альфа-каналы в формате изображения.

  • vImageCGImageFormat_IsEqual

    Если два формата CG эквивалентны - т.е. когда, возвращает true vImageConvert_AnyToAny просто сделал бы копию.

  • vImageConverter_MustOperateOutOfPlace

    Возвраты true когда исходные и конечные изображения передали vImageConvert_AnyToAny не должен накладываться.

  • vImageConvert_AnyToAny

    Высокоэффективный метод для преобразования между почти любым Базовым Графическим форматом пикселя. Преобразования векторизованы и многопоточны. Функциональная альфа поддержек, порядок байтов, формат (например, 8-разрядный для полуплавания), декодируют массив, цветовое пространство и рендеринг поглощенных преобразований и любой комбинации этого. Сделайте все свои форматы изображения «быстрым путем»!

Пример:

Вот пример того, как инициализировать vImage_Buffer нужного формата (BGRA, 8-разрядный, sRGB в этом случае), от файла, на который ссылается CFURLRef. (CFURLRefs бесплатные соединенный мостом с NSURLs):

CFURLRef url = ...;
CGImageSourceRef imageSource = CGImageSourceCreateWithURL(url, NULL);
CGImageRef image = CGImageSourceCreateImageAtIndex( imageSource, 0, NULL );
vImage_Buffer result;
vImage_CGImageFormat format = {
    .bitsPerComponent = 8,
    .bitsPerPixel = 32,
    .bitmapInfo = kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst,  //BGRX8888
    .colorSpace = NULL,    //sRGB
}; // .version, .renderingIntent and .decode all initialized to 0 per C rules
vImage_Error err = vImageBuffer_InitWithCGImage( &result, &format, NULL, image, kvImageNoFlags );

Можно дополнительно выбрать выделять буфер сами и иметь vImage, просто заполняют его корректными пикселями, kvImageNoAllocate флаг.

Аналогично, создание a CGImageRef объект от a vImage_Buffer объект относительно прост:

vImage_Buffer buf = ...;
// Declare the pixel format for the vImage_Buffer
vImage_CGImageFormat format = {
    .bitsPerComponent = 8,
    .bitsPerPixel = 32,
    .bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaLast,  //RGBA8888
}; // .colorspace, .version, .renderingIntent and .decode all initialized to 0 per C rules
CGImageRef image = vImageCreateCGImageFromBuffer( &buf, &format, NULL, NULL, kvImageNoFlags, &err);

Расширенные настройки доступны, чтобы позволить Вашему непосредственно использовать vImage_Buffer возразите как запоминающее устройство для нового изображения, не вызывая копию. Посмотрите vImage_Utilities.h заголовок комментирует для больше. Кроме того, vImageConvert_AnyToAny предоставлен для преобразования почти любого Базового формата Графического изображения в почти любого другого. Все фасеты формата изображения могут быть преобразованы, включая цветовое пространство. Существует также ряд функций удобства для межпреобразования между Базовой Графикой и vImage координатными пространствами и определением, имеют ли два изображения тот же формат.

16-разрядная передискретизация

Новые функции

Высокоэффективные подпрограммы для вращения сдвиньте, деформируйте и измените размеры 16-разрядных изображений точно так же, как 8-разрядные и изображения с плавающей точкой. Поддерживаются оба 16-разрядных формата без знака и со знаком.

  • vImageRotate_ARGB16U / vImageRotate_ARGB16S

  • vImageScale_ARGB16U / vImageScale_ARGB16S

  • vImageAffineWarp_ARGB16U / vImageAffineWarp_ARGB16S

  • vImageHorizontalReflect_ARGB16U / vImageHorizontalReflect_ARGB16S

  • vImageVerticalReflect_ARGB16U / vImageVerticalReflect_ARGB16S

  • vImageHorizontalShear_ARGB16U / vImageHorizontalShear_ARGB16S

  • vImageVerticalShear_ARGB16U / vImageVerticalShear_ARGB16S

Многомерные Таблицы поиска и кусочные гамма кривые

Новые функции

Многомерные таблицы поиска и кусочные гамма кривые (функции питания с линейным сегментом около нуля) обычно используются для преобразования цветов. Мы обеспечиваем высокоэффективные подпрограммы для с плавающей точкой и 16Q12 (16-разрядная фиксированная точка со знаком с 12 дробными битами) форматы изображения для целых 16 цветовых каналов.

  • vImageMultiDimensionalInterpolatedLookupTable_PlanarF

  • vImageMultiDimensionalInterpolatedLookupTable_Planar16Q12

  • vImagePiecewiseGamma_Planar8 / vImagePiecewiseGamma_Planar16Q12 / vImagePiecewiseGamma_PlanarF

  • vImagePiecewiseGamma_Planar8toPlanar16Q12 / vImagePiecewiseGamma_Planar16Q12toPlanar8

  • vImagePiecewiseGamma_Planar8toPlanarF / vImagePiecewiseGamma_PlanarFtoPlanar8

Мы также добавили несколько 1D таблицы поиска:

  • vImageLookupTable_Planar8toPlanar16

  • vImageLookupTable_Planar8toPlanarF / vImageLookupTable_PlanarFtoPlanar8

  • vImageLookupTable_8to64U

И 16-разрядная поддержка умножения матриц, преобразования цветов и цвета скручивает операции на 16-разрядных данных со знаком:

  • vImageMatrixMultiply_Planar16S

Преобразования

Новые функции

Много новых преобразований были добавлены для поддержки vImageConvert_AnyToAny. Они представлены для использования, когда Вы уже знаете, какое преобразование Вы хотите и просто хотите вызвать это.

  • vImageConvert_ARGB16UToARGB8888 / vImageConvert_ARGB8888ToARGB16U

  • vImageConvert_RGB16UToARGB8888 / vImageConvert_ARGB8888ToRGB16U

    (также образуйте канал, переупорядочив и вставка канала),

  • vImageConvert_16Uto16F / vImageConvert_16Fto16U

  • vImageConvert_Planar8toPlanar16F / vImageConvert_Planar16FtoPlanar8

  • vImageConvert_ARGB8888toPlanarF / vImageConvert_ARGBFFFFtoPlanar8

  • vImageConvert_ARGBFFFFtoRGBFFF / vImageConvert_RGBAFFFFtoRGBFFF / vImageConvert_BGRAFFFFtoRGBFFF

  • vImageConvert_RGBFFFtoARGBFFFF / vImageConvert_RGBFFFtoRGBAFFFF / vImageConvert_RGBFFFtoBGRAFFFF

  • vImageConvert_RGBA8888toRGB888 / vImageConvert_BGRA8888toRGB888

  • vImageConvert_RGB565toRGBA8888 / vImageConvert_RGB565toBGRA8888

  • vImageConvert_XRGB8888ToPlanar8 / vImageConvert_BGRX8888ToPlanar8

  • vImageConvert_XRGBFFFFToPlanarF / vImageConvert_BGRXFFFFToPlanarF

  • vImageConvert_Planar16UtoARGB16U / vImageConvert_ARGB16UtoPlanar16U

  • vImageConvert_Planar16UtoRGB16U / vImageConvert_RGB16UtoPlanar16U

  • vImageConvert_RGB16UtoARGB16U / vImageConvert_RGB16UtoRGBA16U / vImageConvert_RGB16UtoBGRA16U

  • vImageConvert_ARGB16UtoRGB16U / vImageConvert_RGBA16UtoRGB16U / vImageConvert_BGRA16UtoRGB16U

  • vImageFlatten_ARGB8888 / vImageFlatten_RGBA8888

  • vImageFlatten_ARGB16U / vImageFlatten_RGBA16U

  • vImageFlatten_ARGB16Q12 / vImageFlatten_RGBA16Q12

  • vImageFlatten_ARGBFFFF / vImageFlatten_RGBAFFFF

  • vImageFlatten_ARGB8888ToRGB888 / vImageFlatten_RGBA8888ToRGB888 / vImageFlatten_BGRA8888ToRGB888

  • vImageFlatten_ARGBFFFFToRGBFFF / vImageFlatten_RGBAFFFFToRGBFFF / vImageFlatten_BGRAFFFFToRGBFFF

  • vImageConvert_Planar1toPlanar8 / vImageConvert_Planar2toPlanar8 / vImageConvert_Planar4toPlanar8

  • vImageConvert_Indexed1toPlanar8 / vImageConvert_Indexed2toPlanar8 / vImageConvert_Indexed4toPlanar8

  • vImageConvert_Planar8toPlanar1 / vImageConvert_Planar8toPlanar2 / vImageConvert_Planar8toPlanar4

  • vImageConvert_Planar8toIndexed1 / vImageConvert_Planar8toIndexed2 / vImageConvert_Planar8toIndexed4

  • vImageConvert_8to16Q12 / vImageConvert_RGB888toPlanar16Q12 / vImageConvert_ARGB8888toPlanar16Q12

  • vImageConvert_16Q12to8 / vImageConvert_Planar16Q12toRGB888 / vImageConvert_Planar16Q12toARGB8888

  • vImageConvert_16Q12toF / vImageConvert_Fto16Q12

  • vImageConvert_16Q12to16U / vImageConvert_16Uto16Q12

  • vImageOverwriteChannelsWithPixel_ARGB8888

  • vImageByteSwap_Planar16U

Другие дополнения

Новые функции

Много новых функций были добавлены для поддержки 16Q12 формат данных. 16Q12 16-разрядный формат фиксированной точки со знаком, способный к представлению диапазона от [–8,8). Это имеет 12 битов дробной точности. Дополнительная точность и диапазон полезны для сохранения сигнальной точности при выполнении нелинейных операций на 8-разрядных данных.

  • vImagePremultipliedAlphaBlendWithPermute_ARGB8888 / vImagePremultipliedAlphaBlendWithPermute_RGBA8888

  • vImagePermuteChannelsWithMaskedInsert_ARGB8888 / vImagePermuteChannelsWithMaskedInsert_ARGBFFFF

  • vImagePremultiplyData_ARGB16Q12 / vImagePremultiplyData_RGBA16Q12

  • vImageUnpremultiplyData_ARGB16Q12 / vImageUnpremultiplyData_RGBA16Q12

  • vImageBufferFill_ARGB16U / vImageBufferFill_ARGB16S