# cnv

## Syntax

`int cnv(int m11, int m12, int m13, int m21, int m22, int m23, int m31, int m32, int m33, int d)`

## Arguments

**m11**
- An integer weighting for the pixel at [x-1,y-1]

**m12**
- An integer weighting for the pixel at [x,y-1]

**m13**
- An integer weighting for the pixel at [x+1,y-1]

**m21**
- An integer weighting for the pixel at [x-1,y]

**m22**
- An integer weighting for the pixel at [x,y]

**m23**
- An integer weighting for the pixel at [x+1,y]

**m31**
- An integer weighting for the pixel at [x-1,y+1]

**m32**
- An integer weighting for the pixel at [x,y+1]

**m33**
- An integer weighting for the pixel at [x+1,y+1]

**d**
- An integer divisor - usually the sum of the nine weighting values

## Return

- An integer in the range 0 to 255

## Description

- This function is valid only in the RGBA and ForEveryPixel handlers; the xyzcnv function performs the same operation in the ForEveryTile handler. The cnv function performs a basic convolution operation using a 3 by 3 matrix of image pixels and a corresponding matrix of weightings. The parameters to the function call represent the values of the weighting matrix, presented in row order - in other words, in the designation used here the first digit after the 'm' represents the row number and the second the column. The divisor 'd' should usually be given as the sum of the nine weightings. The cnv function sums the values for the nine pixels centered on the current [x,y] position and channel, multiplying each pixel value by the corresponding weighting from the matrix; the value returned is then that sum divided by the divisor 'd'.

## Example

%ffp
R,G,B,A : cnv(1,2,1, 2,4,2, 1,2,1, 16) // Simple 3x3 Gaussian blur

## Also see

- xyzcnv

## Comments

- Everyone can add his comments about his experiences with this function here. Tips for using it are welcome, too.