叠加效果

这篇将讲到图片特效处理的图片叠加效果。跟前面一样是对像素点进行处理,可参照前面的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. Bitmap overlay = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.rainbow_overlay);
  14. int w = overlay.getWidth();
  15. int h = overlay.getHeight();
  16. float scaleX = width * 1F / w;
  17. float scaleY = height * 1F / h;
  18. Matrix matrix = new Matrix();
  19. matrix.postScale(scaleX, scaleY);
  20. Bitmap overlayCopy = Bitmap.createBitmap(overlay, 0, 0, w, h, matrix, true);
  21. int pixColor = 0;
  22. int layColor = 0;
  23. int pixR = 0;
  24. int pixG = 0;
  25. int pixB = 0;
  26. int pixA = 0;
  27. int newR = 0;
  28. int newG = 0;
  29. int newB = 0;
  30. int newA = 0;
  31. int layR = 0;
  32. int layG = 0;
  33. int layB = 0;
  34. int layA = 0;
  35. final float alpha = 0.5F;
  36. int[] srcPixels = new int[width * height];
  37. int[] layPixels = new int[width * height];
  38. bmp.getPixels(srcPixels, 0, width, 0, 0, width, height);
  39. overlayCopy.getPixels(layPixels, 0, width, 0, 0, width, height);
  40. int pos = 0;
  41. for (int i = 0; i < height; i++)
  42. {
  43. for (int k = 0; k < width; k++)
  44. {
  45. pos = i * width + k;
  46. pixColor = srcPixels[pos];
  47. layColor = layPixels[pos];
  48. pixR = Color.red(pixColor);
  49. pixG = Color.green(pixColor);
  50. pixB = Color.blue(pixColor);
  51. pixA = Color.alpha(pixColor);
  52. layR = Color.red(layColor);
  53. layG = Color.green(layColor);
  54. layB = Color.blue(layColor);
  55. layA = Color.alpha(layColor);
  56. newR = (int) (pixR * alpha + layR * (1 - alpha));
  57. newG = (int) (pixG * alpha + layG * (1 - alpha));
  58. newB = (int) (pixB * alpha + layB * (1 - alpha));
  59. layA = (int) (pixA * alpha + layA * (1 - alpha));
  60. newR = Math.min(255, Math.max(0, newR));
  61. newG = Math.min(255, Math.max(0, newG));
  62. newB = Math.min(255, Math.max(0, newB));
  63. newA = Math.min(255, Math.max(0, layA));
  64. srcPixels[pos] = Color.argb(newA, newR, newG, newB);
  65. }
  66. }
  67. bitmap.setPixels(srcPixels, 0, width, 0, 0, width, height);
  68. long end = System.currentTimeMillis();
  69. Log.d("may", "overlayAmeliorate used time="+(end - start));
  70. return bitmap;
  71. }

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

叠加效果,布布扣,bubuko.com

时间: 2024-10-12 15:13:09

叠加效果的相关文章

通过layer-list多图层叠加效果实现圆角功能

在android的开发过程中,我们可能会做圆角的效果出来,如下图所示: 四个角都是圆角的效果.如果让UI设计人员直接出图,可能会更简单一些.但是我们使用android中layer-list多图层叠加效果同样可以实现. 我们把它拆分为三个部分,第一个部分是最顶端的那一行(我这里称为顶部),第二部分是中间部分(中间部分不需要圆角效果),第三部分是底部. 顶部的实现: 顶部是一个有灰色边框但无下边框,带圆角,白色背景的长方体.实现效果如下: <?xml version="1.0" en

Animation的重复、叠加效果

在此只是记录最简单的方式. 首先重复可以在xml文件中设置属性 android:repeatCount="infinite" android:repeatMode="restart" 这是repeatcount设置为无限,当然还可以设置为具体数值.repeatMode有两个值可以选择,restart和reverse,分别是重放和回放 效果叠加可以在xml中同时写入几个效果 <translate android:duration="3000"

用LayerDrawable实现两个图片的叠加效果

Drawable[] layers = new Drawable[2]; layers[0] = new ColorDrawable(primaryColor); layers[1] = new ColorDrawable(0x7f000000); LayerDrawable layerDrawable = new LayerDrawable(layers); layerDrawable.setLayerInset(0, 0, 0, 0, 0); layerDrawable.setLayerIn

JAVA实现图片叠加效果

1 import java.awt.AlphaComposite; 2 import java.awt.Graphics2D; 3 import java.awt.image.BufferedImage; 4 import java.io.File; 5 import java.io.IOException; 6 7 import javax.imageio.ImageIO; 8 public class NewImageUtils { 9 /** 10 * 11 * @Title: 构造图片

android 图片叠加效果——两种方法的简介与内容 ,带解决Immutable bitmap passed to Canvas constructor错误

第一种是通过canvas画出来的效果: [java] view plaincopyprint? public void first(View v) { // 防止出现Immutable bitmap passed to Canvas constructor错误 Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.apple).copy(Bitmap.Config.ARGB_8888, true); Bi

CSS3混合模式mix-blend-mode/background-blend-mode简介 ,PS中叠加效果

一.CSS3 mix-blend-mode 首先,要知道”blend-mode”就是混合模式的意思.那mix, 恩,我也不知道为什么命名为mix, 可能是该属性不仅可以作用于HTML,还可以作用于SVG,干脆叫mix一起捋过来.该CSS属性作用是让元素内容和这个元素的背景以及下面的元素发生“混合”. mix-blend-mode: normal; //正常 mix-blend-mode: multiply; //正片叠底 mix-blend-mode: screen; //滤色 mix-blen

[ActionScript 3.0] AS3实现滤镜叠加效果

import flash.display.BitmapData; import flash.filters.BlurFilter; import flash.geom.ColorTransform; import flash.geom.Matrix; addChild(new Bitmap(overlapFilter(new 元件1(),5,1))); function overlapFilter(obj:DisplayObject, dist:Number, qual:Number):Bitm

android 图片叠加效果——两种方法

效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // 防止出现Immutable bitmap passed to Canvas constructor错误 Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.apple).copy(Bitmap.Config.ARGB_8888, true); Bitmap bitmap2

复杂纹理复制及纹理叠加效果

三张贴图通过改变主材质及修饰材质的UV重复次数,实现不同的效果.如下: 图中的房子和围墙只用了三张贴图就实现了完全不同的建筑,厉害吧~~~ shader如下: Properties { _Color("Base Color", Color) = (1,1,1,1) _MainTex("Base(RGB)", 2D) = "white" {} _ColorU("ColorU", float) = 1.0 //主纹理X轴重复次数