2015-12-24 8 views
0

Я пытаюсь создать собственное ядро ​​warp в ios.Как правильно использовать систему координат CIWarpKernel?

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

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]?

ответ

0

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