public static capex.image.PixelRegionBuffer forRgbaPixels(capex.image.RGBAPixelIntegerBuffer src, int w, int h) { var v = new capex.image.PixelRegionBuffer(); v.src = src; v.rangew = w; v.rangeh = h; return(v); }
public static void sampleCubic(capex.image.PixelRegionBuffer src, double su, double sv, capex.image.ImageResizer.IndexMovingBuffer dest) { var aval = 0.00; var arecip = 0.00; var i = 0; var iu = (int)cape.Math.floor(su); var iv = (int)cape.Math.floor(sv); var stride = src.getStride(); var du = 0.00; var dv = 0.00; var br = src.getBufferRegion(iu - 1, iv - 1); if (br == null) { return; } dest.setBuf(br); du = su - iu; dv = sv - iv; aval = capex.image.ImageResizer.drawableTransformCubic(dv, capex.image.ImageResizer.cubicRow(du, dest.move(3 + stride * 0)), capex.image.ImageResizer.cubicRow(du, dest.move(3 + stride * 1)), capex.image.ImageResizer.cubicRow(du, dest.move(3 + stride * 2)), capex.image.ImageResizer.cubicRow(du, dest.move(3 + stride * 3))); if (aval <= 0) { arecip = 0.00; cape.Buffer.setByte(dest.getBuf(), (long)3, (byte)0); } else if (aval > 255.00) { arecip = 1.00 / aval; cape.Buffer.setByte(dest.getBuf(), (long)3, (byte)255); } else { arecip = 1.00 / aval; cape.Buffer.setByte(dest.getBuf(), (long)3, (byte)((int)cape.Math.rint(aval))); } for (i = 0; i < 3; i++) { var v = (int)cape.Math.rint(arecip * capex.image.ImageResizer.drawableTransformCubic(dv, capex.image.ImageResizer.cubicScaledRow(du, dest.move(i + stride * 0), dest.move(3 + stride * 0)), capex.image.ImageResizer.cubicScaledRow(du, dest.move(i + stride * 1), dest.move(3 + stride * 1)), capex.image.ImageResizer.cubicScaledRow(du, dest.move(i + stride * 2), dest.move(3 + stride * 2)), capex.image.ImageResizer.cubicScaledRow(du, dest.move(i + stride * 3), dest.move(3 + stride * 3)))); cape.Buffer.setByte(dest.getBuf(), (long)i, (byte)capex.image.ImageFilterUtil.clamp((double)v)); } }