广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    Android图片特效:黑白特效、圆角效果、高斯模糊

    2018-04-06 10:41:52 次阅读 稿源:互联网
    广告

    1.黑白效果

    代码如下:

    /**
         * 将彩色图转换为黑白图
         *
         * @param 位图
         * @return 返回转换好的位图
         */
        public static Bitmap convertToBlackWhite(Bitmap bmp) {
            int width = bmp.getWidth(); // 获取位图的宽
            int height = bmp.getHeight(); // 获取位图的高

            int[] pixels = new int[width * height]; // 通过位图的大小创建像素点数组

            bmp.getPixels(pixels, 0, width, 0, 0, width, height);
            int alpha = 0xFF << 24;
            for (int i = 0; i < height; i++) {
                for (int j = 0; j < width; j++) {
                    int grey = pixels[width * i + j];

                    int red = ((grey & 0x00FF0000) >> 16);
                    int green = ((grey & 0x0000FF00) >> 8);
                    int blue = (grey & 0x000000FF);

                    grey = (int) (red * 0.3 + green * 0.59 + blue * 0.11);
                    grey = alpha | (grey << 16) | (grey << 8) | grey;
                    pixels[width * i + j] = grey;
                }
            }
            Bitmap newBmp = Bitmap.createBitmap(width, height, Config.RGB_565);
            newBmp.setPixels(pixels, 0, width, 0, 0, width, height);
            return newBmp;
        }

    2.图片圆角

    代码如下:

    /**
         * 转换成圆角
         *
         * @param bmp
         * @param roundPx
         * @return
         */
        public static Bitmap convertToRoundedCorner(Bitmap bmp, float roundPx) {

            Bitmap newBmp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(),
                    Config.ARGB_8888);
            // 得到画布
            Canvas canvas = new Canvas(newBmp);

            final int color = 0xff424242;
            final Paint paint = new Paint();
            final Rect rect = new Rect(0, 0, bmp.getWidth(), bmp.getHeight());
            final RectF rectF = new RectF(rect);

            paint.setAntiAlias(true);
            canvas.drawARGB(0, 0, 0, 0);
            paint.setColor(color);
            // 第二个和第三个参数一样则画的是正圆的一角,否则是椭圆的一角
            canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

            paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
            canvas.drawBitmap(bmp, rect, rect, paint);

            return newBmp;
        }

    3.高斯模糊

    代码如下:

    /**
         * 高斯模糊
         *
         * @param bmp
         * @return
         */
        public static Bitmap convertToBlur(Bitmap bmp) {
            // 高斯矩阵
            int[] gauss = new int[] { 1, 2, 1, 2, 4, 2, 1, 2, 1 };

            int width = bmp.getWidth();
            int height = bmp.getHeight();
            Bitmap newBmp = Bitmap.createBitmap(width, height,
                    Bitmap.Config.RGB_565);

            int pixR = 0;
            int pixG = 0;
            int pixB = 0;

            int pixColor = 0;

            int newR = 0;
            int newG = 0;
            int newB = 0;

            int delta = 16; // 值越小图片会越亮,越大则越暗

            int idx = 0;
            int[] pixels = new int[width * height];
            bmp.getPixels(pixels, 0, width, 0, 0, width, height);
            for (int i = 1, length = height - 1; i < length; i++) {
                for (int k = 1, len = width - 1; k < len; k++) {
                    idx = 0;
                    for (int m = -1; m <= 1; m++) {
                        for (int n = -1; n <= 1; n++) {
                            pixColor = pixels[(i + m) * width + k + n];
                            pixR = Color.red(pixColor);
                            pixG = Color.green(pixColor);
                            pixB = Color.blue(pixColor);

                            newR = newR + pixR * gauss[idx];
                            newG = newG + pixG * gauss[idx];
                            newB = newB + pixB * gauss[idx];
                            idx++;
                        }
                    }

                    newR /= delta;
                    newG /= delta;
                    newB /= delta;

                    newR = Math.min(255, Math.max(0, newR));
                    newG = Math.min(255, Math.max(0, newG));
                    newB = Math.min(255, Math.max(0, newB));

                    pixels[i * width + k] = Color.argb(255, newR, newG, newB);

                    newR = 0;
                    newG = 0;
                    newB = 0;
                }
            }

            newBmp.setPixels(pixels, 0, width, 0, 0, width, height);

            return newBmp;
        }

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告