zoukankan      html  css  js  c++  java
  • android 图片特效处理之 图片叠加

    这篇将讲到图片特效处理的图片叠加效果。跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加android图像处理系列之六--给图片添加边框(下)-图片叠加两篇文章,此篇所讲的与之前有一点区别。叠加原理是两张图片的像素点按透明度叠加,不会进行颜色过滤。叠加图片可以是JPG格式,跟前在一样,最好是放大assets目录。下面看效果图:

    +

    代码:

    1. /** 
    2.      * 图片效果叠加 
    3.      * @param bmp 限制了尺寸大小的Bitmap 
    4.      * @return 
    5.      */  
    6.     private Bitmap overlay(Bitmap bmp)  
    7.     {  
    8.         long start = System.currentTimeMillis();  
    9.         int width = bmp.getWidth();  
    10.         int height = bmp.getHeight();  
    11.         Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);  
    12.           
    13.         // 对边框图片进行缩放  
    14.         Bitmap overlay = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.rainbow_overlay);  
    15.         int w = overlay.getWidth();  
    16.         int h = overlay.getHeight();  
    17.         float scaleX = width * 1F / w;  
    18.         float scaleY = height * 1F / h;  
    19.         Matrix matrix = new Matrix();  
    20.         matrix.postScale(scaleX, scaleY);  
    21.           
    22.         Bitmap overlayCopy = Bitmap.createBitmap(overlay, 0, 0, w, h, matrix, true);  
    23.           
    24.         int pixColor = 0;  
    25.         int layColor = 0;  
    26.           
    27.         int pixR = 0;  
    28.         int pixG = 0;  
    29.         int pixB = 0;  
    30.         int pixA = 0;  
    31.           
    32.         int newR = 0;  
    33.         int newG = 0;  
    34.         int newB = 0;  
    35.         int newA = 0;  
    36.           
    37.         int layR = 0;  
    38.         int layG = 0;  
    39.         int layB = 0;  
    40.         int layA = 0;  
    41.           
    42.         final float alpha = 0.5F;  
    43.           
    44.         int[] srcPixels = new int[width * height];  
    45.         int[] layPixels = new int[width * height];  
    46.         bmp.getPixels(srcPixels, 0, width, 0, 0, width, height);  
    47.         overlayCopy.getPixels(layPixels, 0, width, 0, 0, width, height);  
    48.           
    49.         int pos = 0;  
    50.         for (int i = 0; i < height; i++)  
    51.         {  
    52.             for (int k = 0; k < width; k++)  
    53.             {  
    54.                 pos = i * width + k;  
    55.                 pixColor = srcPixels[pos];  
    56.                 layColor = layPixels[pos];  
    57.                   
    58.                 pixR = Color.red(pixColor);  
    59.                 pixG = Color.green(pixColor);  
    60.                 pixB = Color.blue(pixColor);  
    61.                 pixA = Color.alpha(pixColor);  
    62.                   
    63.                 layR = Color.red(layColor);  
    64.                 layG = Color.green(layColor);  
    65.                 layB = Color.blue(layColor);  
    66.                 layA = Color.alpha(layColor);  
    67.                   
    68.                 newR = (int) (pixR * alpha + layR * (1 - alpha));  
    69.                 newG = (int) (pixG * alpha + layG * (1 - alpha));  
    70.                 newB = (int) (pixB * alpha + layB * (1 - alpha));  
    71.                 layA = (int) (pixA * alpha + layA * (1 - alpha));  
    72.                   
    73.                 newR = Math.min(255, Math.max(0, newR));  
    74.                 newG = Math.min(255, Math.max(0, newG));  
    75.                 newB = Math.min(255, Math.max(0, newB));  
    76.                 newA = Math.min(255, Math.max(0, layA));  
    77.                   
    78.                 srcPixels[pos] = Color.argb(newA, newR, newG, newB);  
    79.             }  
    80.         }  
    81.           
    82.         bitmap.setPixels(srcPixels, 0, width, 0, 0, width, height);  
    83.         long end = System.currentTimeMillis();  
    84.         Log.d("may", "overlayAmeliorate used time="+(end - start));  
    85.         return bitmap;  
    86.     }  


    叠加的边框图片还是大点比较好,也要控制被叠加图片大小。alpha变量值可以根据需求修改,建议还是大于0.5比较好,不然原图会看不清楚。

  • 相关阅读:
    修改MySQL密码
    struts入门
    监听
    游戏外挂教程(转)
    “无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性 “之解决
    C# PropertyGrid控件应用心得
    登录时的"记住我"
    自动登录、记住我(保存登陆状态)实现
    UpdatePanel的使用方法
    asp.net中使用基于角色role的Forms验证
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6722642.html
Copyright © 2011-2022 走看看