2013-04-29 15 views
2

我試圖創建自定義cifilter(如Adobe的經過濾)。如何僅將幾個像素(即ROI)移動到內核語言的其他位置?也許有人可以建議我一些關於它的信息?我已經閱讀了關於創建自定義cifilter的所有蘋果文檔,但還沒有找到任何類似的過濾器的核心部分的例子。有一些CIFilter做類似的事情(比如CITwirlDistortion,CIBumpDistortion)。也許有一個地方我可以找到他們的內核?定製CIKernel移動的像素

回答

4

你必須這樣做反向。不要說我想把這些輸入像素放在輸出中的這個位置,你必須回答這個輸出像素的輸入像素在哪裏。

在這個內核看看:

kernel vec4 coreImageKernel(sampler image, float minX, float maxX, float shift) 
{ 
    vec2 coord = samplerCoord(image); 

    float x = coord.x; 
    float inRange = compare(minX - x, compare(x - maxX, 1., 0.), 0.); 
    coord.x = coord.x + inRange * shift; 
    return sample(image, coord); 
} 

它取代了minX和maxX的之間的垂直條紋與轉移是像素右側圖片中的內容。在minX = 100的情況下使用此內核,maxX = 300和shift = 500將在左下角顯示圖像。原件位於右上方。

minX = 100, maxX = 300 and shift = 500

所以效果是,你在範圍內移動的像素(其minX +移,maxX的+偏移)至(其minX,maxX的)