Android图片特效处理之图片叠加
16lz
2021-01-23
这篇将讲到图片特效处理的图片叠加效果。跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加和android图像处理系列之六--给图片添加边框(下)-图片叠加两篇文章,此篇所讲的与之前有一点区别。叠加原理是两张图片的像素点按透明度叠加,不会进行颜色过滤。叠加图片可以是JPG格式,跟前在一样,最好是放大assets目录。下面看效果图:
+=
代码:
[java] view plain copy- /**
- *图片效果叠加
- *@parambmp限制了尺寸大小的Bitmap
- *@return
- */
- privateBitmapoverlay(Bitmapbmp)
- {
- longstart=System.currentTimeMillis();
- intwidth=bmp.getWidth();
- intheight=bmp.getHeight();
- Bitmapbitmap=Bitmap.createBitmap(width,height,Bitmap.Config.RGB_565);
- //对边框图片进行缩放
- Bitmapoverlay=BitmapFactory.decodeResource(mContext.getResources(),R.drawable.rainbow_overlay);
- intw=overlay.getWidth();
- inth=overlay.getHeight();
- floatscaleX=width*1F/w;
- floatscaleY=height*1F/h;
- Matrixmatrix=newMatrix();
- matrix.postScale(scaleX,scaleY);
- BitmapoverlayCopy=Bitmap.createBitmap(overlay,0,0,w,h,matrix,true);
- intpixColor=0;
- intlayColor=0;
- intpixR=0;
- intpixG=0;
- intpixB=0;
- intpixA=0;
- intnewR=0;
- intnewG=0;
- intnewB=0;
- intnewA=0;
- intlayR=0;
- intlayG=0;
- intlayB=0;
- intlayA=0;
- finalfloatalpha=0.5F;
- int[]srcPixels=newint[width*height];
- int[]layPixels=newint[width*height];
- bmp.getPixels(srcPixels,0,width,0,0,width,height);
- overlayCopy.getPixels(layPixels,0,width,0,0,width,height);
- intpos=0;
- for(inti=0;i<height;i++)
- {
- for(intk=0;k<width;k++)
- {
- pos=i*width+k;
- pixColor=srcPixels[pos];
- layColor=layPixels[pos];
- pixR=Color.red(pixColor);
- pixG=Color.green(pixColor);
- pixB=Color.blue(pixColor);
- pixA=Color.alpha(pixColor);
- layR=Color.red(layColor);
- layG=Color.green(layColor);
- layB=Color.blue(layColor);
- layA=Color.alpha(layColor);
- newR=(int)(pixR*alpha+layR*(1-alpha));
- newG=(int)(pixG*alpha+layG*(1-alpha));
- newB=(int)(pixB*alpha+layB*(1-alpha));
- layA=(int)(pixA*alpha+layA*(1-alpha));
- newR=Math.min(255,Math.max(0,newR));
- newG=Math.min(255,Math.max(0,newG));
- newB=Math.min(255,Math.max(0,newB));
- newA=Math.min(255,Math.max(0,layA));
- srcPixels[pos]=Color.argb(newA,newR,newG,newB);
- }
- }
- bitmap.setPixels(srcPixels,0,width,0,0,width,height);
- longend=System.currentTimeMillis();
- Log.d("may","overlayAmeliorateusedtime="+(end-start));
- returnbitmap;
- }
叠加的边框图片还是大点比较好,也要控制被叠加图片大小。alpha变量值可以根据需求修改,建议还是大于0.5比较好,不然原图会看不清楚。
更多相关文章
- android sqlite 存储图片
- 学习笔记之——Android中的Picasso实现圆形头像、圆角图片工具类
- ndroid显示在线图片
- Android 根据所给的图片位置获得Thumbnail
- Android HttpURLConnection上传图片至Servlet端指定目录
- Android当中显示网络图片
- android通过Intent调用手机图片,音频,视频录音拍照等代码
- android通过图片名称获取资源识别码