Exemplo n.º 1
0
 public static capex.image.BitmapBuffer filterRedSepia(capex.image.BitmapBuffer bmpbuf)
 {
     if (bmpbuf == null)
     {
         return(null);
     }
     return(capex.image.GreyscaleImage.createRedSepia(bmpbuf));
 }
Exemplo n.º 2
0
 public static capex.image.BitmapBuffer resizeImage(capex.image.BitmapBuffer bmpbuf, int nw = -1, int nh = -1, int type = 0)
 {
     if (bmpbuf == null)
     {
         return(null);
     }
     if (type == capex.image.ImageFilter.RESIZE_TYPE_BICUBIC)
     {
         return(capex.image.ImageResizer.resizeBicubic(bmpbuf, nw, nh));
     }
     return(capex.image.ImageResizer.resizeBilinear(bmpbuf, nw, nh));
 }
Exemplo n.º 3
0
        public static capex.image.BitmapBuffer createForArrayFilter(capex.image.BitmapBuffer bmpbuf, double[] filterArray, int fw, int fh, double factor = 1.00, double bias = 1.00)
        {
            var srcbuf = bmpbuf.getBuffer();
            var w      = bmpbuf.getWidth();
            var h      = bmpbuf.getHeight();

            if (w < 1 || h < 1)
            {
                return(null);
            }
            var desbuf = new byte[w * h * 4];
            var x      = 0;
            var y      = 0;
            var srcptr = srcbuf;
            var desptr = desbuf;
            var sz     = (int)cape.Buffer.getSize(srcbuf);

            for (x = 0; x < w; x++)
            {
                for (y = 0; y < h; y++)
                {
                    var sr = 0.00;
                    var sg = 0.00;
                    var sb = 0.00;
                    var sa = 0.00;
                    var fx = 0;
                    var fy = 0;
                    for (fy = 0; fy < fh; fy++)
                    {
                        for (fx = 0; fx < fw; fx++)
                        {
                            var ix = x - fw / 2 + fx;
                            var iy = y - fh / 2 + fy;
                            sr += (double)(capex.image.ImageFilterUtil.getSafeByte(srcptr, sz, (iy * w + ix) * 4 + 0) * filterArray[fy * fw + fx]);
                            sg += (double)(capex.image.ImageFilterUtil.getSafeByte(srcptr, sz, (iy * w + ix) * 4 + 1) * filterArray[fy * fw + fx]);
                            sb += (double)(capex.image.ImageFilterUtil.getSafeByte(srcptr, sz, (iy * w + ix) * 4 + 2) * filterArray[fy * fw + fx]);
                            sa += (double)(capex.image.ImageFilterUtil.getSafeByte(srcptr, sz, (iy * w + ix) * 4 + 3) * filterArray[fy * fw + fx]);
                        }
                    }
                    cape.Buffer.setByte(desptr, (long)((y * w + x) * 4 + 0), (byte)capex.image.ImageFilterUtil.clamp(factor * sr + bias));
                    cape.Buffer.setByte(desptr, (long)((y * w + x) * 4 + 1), (byte)capex.image.ImageFilterUtil.clamp(factor * sg + bias));
                    cape.Buffer.setByte(desptr, (long)((y * w + x) * 4 + 2), (byte)capex.image.ImageFilterUtil.clamp(factor * sb + bias));
                    cape.Buffer.setByte(desptr, (long)((y * w + x) * 4 + 3), (byte)capex.image.ImageFilterUtil.clamp(factor * sa + bias));
                }
            }
            return(capex.image.BitmapBuffer.create(desbuf, w, h));
        }
Exemplo n.º 4
0
        public static capex.image.BitmapBuffer filterEmboss(capex.image.BitmapBuffer bmpbuf)
        {
            if (bmpbuf == null)
            {
                return(null);
            }
            var array = new double[] {
                -2.00,
                -1.00,
                0.00,
                -1.00,
                1.00,
                1.00,
                0.00,
                1.00,
                2.00
            };

            return(capex.image.ImageFilterUtil.createForArrayFilter(bmpbuf, array, 3, 3, 2.00, 0.00));
        }
Exemplo n.º 5
0
        public static capex.image.BitmapBuffer createGreyscale(capex.image.BitmapBuffer bmpbuf, double rf = 1.00, double gf = 1.00, double bf = 1.00, double af = 1.00)
        {
            var w      = bmpbuf.getWidth();
            var h      = bmpbuf.getHeight();
            var srcbuf = bmpbuf.getBuffer();

            if (srcbuf == null || w < 1 || h < 1)
            {
                return(null);
            }
            var desbuf = new byte[w * h * 4];

            if (desbuf == null)
            {
                return(null);
            }
            var ss     = (int)cape.Buffer.getSize(srcbuf);
            var srcptr = srcbuf;
            var desptr = desbuf;
            var x      = 0;
            var y      = 0;

            for (y = 0; y < h; y++)
            {
                for (x = 0; x < w; x++)
                {
                    var sr   = (double)(capex.image.ImageFilterUtil.getSafeByte(srcptr, ss, (y * w + x) * 4 + 0) * 0.21);
                    var sg   = (double)(capex.image.ImageFilterUtil.getSafeByte(srcptr, ss, (y * w + x) * 4 + 1) * 0.72);
                    var sb   = (double)(capex.image.ImageFilterUtil.getSafeByte(srcptr, ss, (y * w + x) * 4 + 2) * 0.07);
                    var sa   = (double)capex.image.ImageFilterUtil.getSafeByte(srcptr, ss, (y * w + x) * 4 + 3);
                    var sbnw = (int)(sr + sg + sb);
                    cape.Buffer.setByte(desptr, (long)((y * w + x) * 4 + 0), (byte)capex.image.ImageFilterUtil.clamp((double)(sbnw * rf)));
                    cape.Buffer.setByte(desptr, (long)((y * w + x) * 4 + 1), (byte)capex.image.ImageFilterUtil.clamp((double)(sbnw * gf)));
                    cape.Buffer.setByte(desptr, (long)((y * w + x) * 4 + 2), (byte)capex.image.ImageFilterUtil.clamp((double)(sbnw * bf)));
                    cape.Buffer.setByte(desptr, (long)((y * w + x) * 4 + 3), (byte)capex.image.ImageFilterUtil.clamp(sa * af));
                }
            }
            return(capex.image.BitmapBuffer.create(desbuf, w, h));
        }
Exemplo n.º 6
0
        public static capex.image.BitmapBuffer filterBlur(capex.image.BitmapBuffer bmpbuf)
        {
            if (bmpbuf == null)
            {
                return(null);
            }
            var array = new double[] {
                0.00,
                0.00,
                1.00,
                0.00,
                0.00,
                0.00,
                1.00,
                1.00,
                1.00,
                0.00,
                1.00,
                1.00,
                1.00,
                1.00,
                1.00,
                0.00,
                1.00,
                1.00,
                1.00,
                0.00,
                0.00,
                0.00,
                1.00,
                0.00,
                0.00
            };

            return(capex.image.ImageFilterUtil.createForArrayFilter(bmpbuf, array, 5, 5, 1.00 / 13.00));
        }
Exemplo n.º 7
0
 public static capex.image.BitmapBuffer createRedSepia(capex.image.BitmapBuffer imgbuf)
 {
     return(capex.image.GreyscaleImage.createGreyscale(imgbuf, 110.00 / 255.00 + 1.00, 66.00 / 255.00 + 1.00, 20.00 / 255.00 + 1.00));
 }
Exemplo n.º 8
0
        public static capex.image.BitmapBuffer resizeBicubic(capex.image.BitmapBuffer bb, int anw, int anh)
        {
            if (anw == 0 || anh == 0)
            {
                return(null);
            }
            if (anw < 0 && anh < 0)
            {
                return(bb);
            }
            var sb = bb.getBuffer();

            if (sb == null)
            {
                return(null);
            }
            var w      = bb.getWidth();
            var h      = bb.getHeight();
            var scaler = 1.00;
            var nw     = anw;
            var nh     = anh;

            if (nw < 0)
            {
                scaler = (double)nh / (double)h;
            }
            else if (nh < 0)
            {
                scaler = (double)nw / (double)w;
            }
            if (scaler != 1.00)
            {
                nw = (int)((double)w * scaler);
                nh = (int)((double)h * scaler);
            }
            var v = new byte[nw * nh * 4];

            capex.image.ImageResizer.IndexMovingBuffer destp = null;
            destp.setBuf(v);
            var y      = 0;
            var sx     = (double)nw / (double)w;
            var sy     = (double)nh / (double)h;
            var matrix = capex.util.Matrix33.forScale(sx, sy);

            matrix = capex.util.Matrix33.invertMatrix(matrix);
            var uinc   = matrix.v[0];
            var vinc   = matrix.v[1];
            var winc   = matrix.v[2];
            var pixels = capex.image.RGBAPixelIntegerBuffer.create(sb, w, h);
            var pixrgn = capex.image.PixelRegionBuffer.forRgbaPixels(pixels, 4, 4);
            var tu     = new double[5];
            var tv     = new double[5];
            var tw     = new double[5];
            var su     = new double[5];
            var sv     = new double[5];

            for (y = 0; y < nh; y++)
            {
                capex.image.ImageResizer.untransformCoords(matrix, 0, y, tu, tv, tw);
                var width = nw;
                while (width-- > 0)
                {
                    var i = 0;
                    capex.image.ImageResizer.normalizeCoords(5, tu, tv, tw, su, sv);
                    if (capex.image.ImageResizer.superSampleDtest(su[1], sv[1], su[2], sv[2], su[3], sv[3], su[4], sv[4]))
                    {
                        capex.image.ImageResizer.sampleAdapt(pixels, su[0], sv[0], su[1], sv[1], su[2], sv[2], su[3], sv[3], su[4], sv[4], destp);
                    }
                    else
                    {
                        capex.image.ImageResizer.sampleCubic(pixrgn, su[0], sv[0], destp);
                    }
                    destp = destp.move(4);
                    for (i = 0; i < 5; i++)
                    {
                        tu[i] = tu[i] + uinc;
                        tv[i] = tv[i] + vinc;
                        tw[i] = tw[i] + winc;
                    }
                }
            }
            return(capex.image.BitmapBuffer.create(v, nw, nh));
        }
Exemplo n.º 9
0
        public static capex.image.BitmapBuffer resizeBilinear(capex.image.BitmapBuffer bmpbuf, int anw, int anh)
        {
            if (anw == 0 || anh == 0)
            {
                return(null);
            }
            if (anw < 0 && anh < 0)
            {
                return(bmpbuf);
            }
            var src = bmpbuf.getBuffer();

            if (src == null)
            {
                return(null);
            }
            var sz = (int)cape.Buffer.getSize(src);
            var ow = bmpbuf.getWidth();
            var oh = bmpbuf.getHeight();

            if (ow == anw && oh == anh)
            {
                return(bmpbuf);
            }
            if (sz != ow * oh * 4)
            {
                return(null);
            }
            var nw     = anw;
            var nh     = anh;
            var scaler = 1.00;

            if (nw < 0)
            {
                scaler = (double)nh / (double)oh;
            }
            else if (nh < 0)
            {
                scaler = (double)nw / (double)ow;
            }
            if (scaler != 1.00)
            {
                nw = (int)((double)ow * scaler);
                nh = (int)((double)oh * scaler);
            }
            var dest = new byte[nw * nh * 4];

            if (dest == null)
            {
                return(null);
            }
            var desp  = dest;
            var srcp  = src;
            var dx    = 0;
            var dy    = 0;
            var stepx = (double)((ow - 1.00) / (nw - 1.00));
            var stepy = (double)((oh - 1.00) / (nh - 1.00));

            for (dy = 0; dy < nh; dy++)
            {
                for (dx = 0; dx < nw; dx++)
                {
                    var ptx  = (double)(dx * stepx);
                    var pty  = (double)(dy * stepy);
                    var ix   = (int)ptx;
                    var iy   = (int)pty;
                    var q11i = (iy * ow + ix) * 4;
                    var q21i = (iy * ow + ix + 1) * 4;
                    var q12i = ((iy + 1) * ow + ix) * 4;
                    var q22i = ((iy + 1) * ow + ix + 1) * 4;
                    var rq11 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q11i + 0);
                    var gq11 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q11i + 1);
                    var bq11 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q11i + 2);
                    var aq11 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q11i + 3);
                    var rq21 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q21i + 0);
                    var gq21 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q21i + 1);
                    var bq21 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q21i + 2);
                    var aq21 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q21i + 3);
                    var rq12 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q12i + 0);
                    var gq12 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q12i + 1);
                    var bq12 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q12i + 2);
                    var aq12 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q12i + 3);
                    var rq22 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q22i + 0);
                    var gq22 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q22i + 1);
                    var bq22 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q22i + 2);
                    var aq22 = capex.image.ImageFilterUtil.getSafeByte(srcp, sz, q22i + 3);
                    var resr = (int)capex.image.ImageResizer.bilinearInterpolation(rq11, rq21, rq12, rq22, ptx - ix, pty - iy);
                    var resg = (int)capex.image.ImageResizer.bilinearInterpolation(gq11, gq21, gq12, gq22, ptx - ix, pty - iy);
                    var resb = (int)capex.image.ImageResizer.bilinearInterpolation(bq11, bq21, bq12, bq22, ptx - ix, pty - iy);
                    var resa = (int)capex.image.ImageResizer.bilinearInterpolation(aq11, aq21, aq12, aq22, ptx - ix, pty - iy);
                    cape.Buffer.setByte(desp, (long)((dy * nw + dx) * 4 + 0), (byte)resr);
                    cape.Buffer.setByte(desp, (long)((dy * nw + dx) * 4 + 1), (byte)resg);
                    cape.Buffer.setByte(desp, (long)((dy * nw + dx) * 4 + 2), (byte)resb);
                    cape.Buffer.setByte(desp, (long)((dy * nw + dx) * 4 + 3), (byte)resa);
                }
            }
            return(capex.image.BitmapBuffer.create(dest, nw, nh));
        }