public SeparableConvolveOpImage(RenderedImage source, BorderExtender extender,
RenderingHints hints, ImageLayout l, KernelJAI kernel, ROI roi, Range noData,
double destinationNoData, boolean skipNoData) {
super(source, extender, hints, l, kernel, roi, noData, destinationNoData, skipNoData);
this.kernel = kernel;
kw = kernel.getWidth();
kh = kernel.getHeight();
kx = kernel.getXOrigin();
ky = kernel.getYOrigin();
hValues = kernel.getHorizontalKernelData();
vValues = kernel.getVerticalKernelData();
if (sampleModel.getDataType() == DataBuffer.TYPE_BYTE) {
hTables = new float[hValues.length][256];
for (int i = 0; i < hValues.length; i++) {
float k = hValues[i];
for (int j = 0; j < 256; j++) {
byte b = (byte)j;
float f = (float)j;
hTables[i][b+128] = hasNoData && noData.contains(b) ? 0 : k*f;
}
}
}
}