public static void sampleAdapt(capex.image.RGBAPixelIntegerBuffer src, double xc, double yc, double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3, capex.image.ImageResizer.IndexMovingBuffer dest) { var cc = 0; var i = 0; var c = new int[4]; var cciv = 0; capex.image.ImageResizer.getSample(src, capex.image.ImageResizer.double2Fixed(xc), capex.image.ImageResizer.double2Fixed(yc), capex.image.ImageResizer.double2Fixed(x0), capex.image.ImageResizer.double2Fixed(y0), capex.image.ImageResizer.double2Fixed(x1), capex.image.ImageResizer.double2Fixed(y1), capex.image.ImageResizer.double2Fixed(x2), capex.image.ImageResizer.double2Fixed(y2), capex.image.ImageResizer.double2Fixed(x3), capex.image.ImageResizer.double2Fixed(y3), cciv, 3, c); cc = cciv; if (cc == 0) { cc = 1; } var aa = c[3] / cc; cape.Buffer.setByte(dest.getBuf(), (long)3, (byte)aa); if (aa != 0) { for (i = 0; i < 3; i++) { cape.Buffer.setByte(dest.getBuf(), (long)i, (byte)(c[i] / cc * 255 / aa)); } } else { for (i = 0; i < 3; i++) { cape.Buffer.setByte(dest.getBuf(), (long)i, (byte)0); } } }
public static void sampleBi(capex.image.RGBAPixelIntegerBuffer pixels, int x, int y, int[] color) { capex.image.ImageResizer.initFixedUnit(); var xscale = x & capex.image.ImageResizer.unit - 1; var yscale = y & capex.image.ImageResizer.unit - 1; var x0 = x >> capex.image.ImageResizer.FIXED_SHIFT; var y0 = y >> capex.image.ImageResizer.FIXED_SHIFT; var x1 = x0 + 1; var y1 = y0 + 1; var i = 0; var c0 = pixels.getRgbaPixel(x0, y0, true); var c1 = pixels.getRgbaPixel(x1, y0, true); var c2 = pixels.getRgbaPixel(x0, y1, true); var c3 = pixels.getRgbaPixel(x1, y1, true); color[3] = capex.image.ImageResizer.lerp(capex.image.ImageResizer.lerp(c0[3], c1[3], yscale), capex.image.ImageResizer.lerp(c2[3], c3[3], yscale), xscale); if (color[3] != 0) { for (i = 0; i < 3; i++) { color[i] = capex.image.ImageResizer.lerp(capex.image.ImageResizer.lerp(c0[i] * c0[3] / 255, c1[i] * c1[3] / 255, yscale), capex.image.ImageResizer.lerp(c2[i] * c2[3] / 255, c3[i] * c3[3] / 255, yscale), xscale); } } else { for (i = 0; i < 3; i++) { color[i] = 0; } } }
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 capex.image.RGBAPixelIntegerBuffer create(byte[] b, int w, int h) { var v = new capex.image.RGBAPixelIntegerBuffer(); v.buffer = b; v.width = w; v.height = h; v.pointer = b; return(v); }
public static void getSample(capex.image.RGBAPixelIntegerBuffer pixels, int xc, int yc, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int cciv, int level, int[] color) { if (level == 0 || capex.image.ImageResizer.supersampleTest((double)x0, (double)y0, (double)x1, (double)y1, (double)x2, (double)y2, (double)x3, (double)y3) == false) { var i = 0; var c = new int[4]; capex.image.ImageResizer.sampleBi(pixels, xc, yc, c); for (i = 0; i < 4; i++) { color[i] = color[i] + c[i]; } } else { var tx = 0; var lx = 0; var rx = 0; var bx = 0; var tlx = 0; var trx = 0; var blx = 0; var brx = 0; var ty = 0; var ly = 0; var ry = 0; var by = 0; var tly = 0; var trz = 0; var bly = 0; var bry = 0; tx = (x0 + x1) / 2; tlx = (x0 + xc) / 2; trx = (x1 + xc) / 2; lx = (x0 + x3) / 2; rx = (x1 + x2) / 2; blx = (x2 + xc) / 2; brx = (x3 + xc) / 2; bx = (x3 + x2) / 2; ty = (y0 + y1) / 2; tly = (y0 + yc) / 2; trz = (y1 + yc) / 2; ly = (y0 + y3) / 2; ry = (y1 + y2) / 2; bly = (y3 + yc) / 2; bry = (y2 + yc) / 2; by = (y3 + y2) / 2; capex.image.ImageResizer.getSample(pixels, tlx, tly, x0, y0, tx, ty, xc, yc, lx, ly, cciv, level - 1, color); capex.image.ImageResizer.getSample(pixels, trx, trz, tx, ty, x1, y1, rx, ry, xc, yc, cciv, level - 1, color); capex.image.ImageResizer.getSample(pixels, brx, bry, xc, yc, rx, ry, x2, y2, bx, by, cciv, level - 1, color); capex.image.ImageResizer.getSample(pixels, blx, bly, lx, ly, xc, yc, bx, by, x3, y3, cciv, level - 1, color); } }