Изменить альфа на основе значений RGB с помощью Accelerate Framework

Можно ли отрегулировать альфа-канал с использованием инфраструктуры ускорения на основе значения RGB пикселей?

В частности, я хочу установить альфа на 0 если цвет черный (RGB 0/0/0)

1 ответ

Решение

Не с ускорением. В CoreGraphics вы можете установить маскирующий цвет, если хотите.

https://developer.apple.com/library/mac/documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_images/dq_images.html

Строго говоря, если вы устанавливаете маскирующий цвет для CGImageRef, а затем декодируете его в пиксели с помощью vImageBufer_InitWithCGImage, он должен делать то, что / может / квалифицировать. Тем не менее, CG делает маскировку в этом случае.

Вы можете подать Радар с просьбой об этом. До сих пор это не было приоритетом, потому что альфа, который вы получаете, не является сглаженным.

typedef __attribute__ ((ext_vector_type( 4),__aligned__( 16))) uint32_t uint4;

// ARGB example (on little endian processor):
//   uint4 result = maskByColor( pixels, (uint4)0, (uint4) 0x000000ff );
uint4 maskByColor( uint4 fourPixels, uint4 maskColor, uint4 alphaMask ){
    return fourPixels & ~(maskColor == (fourPixels & ~alphaMask));
}
Другие вопросы по тегам