Как правильно использовать систему координат CIWarpKernel?

Я пытаюсь собрать собственное ядро ​​деформации в IOS.

У меня есть этот код ядра

var kernelCode =
        " kernel vec2 partialFlip(vec2 center, float width, float height) {   " + "\n" +
        " vec2 p = destCoord();    " + "\n" +
        " float x = width - p.x;   " + "\n" +
        " float y = height - p.y;   " + "\n" +
        " return vec2(x, y); }  ";

        kernel = CIWarpKernel(string: kernelCode);

Я хочу перевернуть регион вертикально и горизонтально, когда пользователь нажимает на изображение. Регион рассчитывается с помощью касания пользователя и постоянной ширины. Просто когда я нажимаю на изображение, все изображение превращается в один цвет, я предполагаю, что каждый пиксель принимает свой новый цвет только из одного пикселя. Для использования ядра, которое я вызываю

 var width = radius;
 var height = radius;   
 var roi  = CGRectMake(center.X - width / 2,center.Y - height / 2, width, height);
    return kernel.applyWithExtent(roi, roiCallback: {(n : Int32, rect: CGRect) -> CGRect in return rect; }, inputImage: image, arguments: [center, width, height])!;

Мой центр и радиус получаются из системы координат изображения. Я что-то здесь упускаю? Должен ли я уменьшить все до [0,1]?

1 ответ

Координаты базового изображения в ненормализованных пикселях. Координаты декартовы (т. Е. Начало координат слева внизу)

Другие вопросы по тегам