zoukankan      html  css  js  c++  java
  • 叠加效果

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

    +

    代码:

    [java] view plaincopy
     
    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比较好,不然原图会看不清楚。

  • 相关阅读:
    Mayan游戏 (codevs 1136)题解
    虫食算 (codevs 1064)题解
    靶形数独 (codevs 1174)题解
    黑白棋游戏 (codevs 2743)题解
    神经网络 (codevs 1088) 题解
    The Rotation Game (POJ 2286) 题解
    倒水问题 (codevs 1226) 题解
    银河英雄传说 (codevs 1540) 题解
    生日蛋糕 (codevs 1710) 题解
    第一章 1.11 高阶函数
  • 原文地址:https://www.cnblogs.com/clarence/p/3837794.html
Copyright © 2011-2022 走看看