kernel AreaMosaicFilter < namespace : "kiyokazk"; vendor : "kiyokazk"; version : 1; description : "area mosaic"; > { input image4 src; output pixel4 dst; parameter int mosaicSize < minValue:int(1); maxValue:int(64); defaultValue:int(8); >; parameter int areaSize < minValue:int(10); maxValue:int(300); defaultValue:int(50); >; parameter int2 position < minValue:int2(0,0); maxValue:int2(500,500); defaultValue:int2(100,100); >; void evaluatePixel() { float2 coord = outCoord(); int2 srcCoord = int2(coord); float x_sqr = float(srcCoord.x-position.x) * float(srcCoord.x-position.x); float y_sqr = float(srcCoord.y-position.y) * float(srcCoord.y-position.y); float size_sqr = float(areaSize) * float(areaSize); if( x_sqr + y_sqr < size_sqr ){ int2 useCoord = srcCoord; useCoord /= mosaicSize; useCoord *= mosaicSize; useCoord += mosaicSize/2; pixel4 useCol = sampleNearest(src,float2(useCoord)); dst = useCol; } else{ pixel4 useCol = sampleNearest(src,coord); dst = useCol; } } }