Android 图片的合成
本文实现在Android下图片的合成
布局设计比较简单:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/> </RelativeLayout>
逻辑部分代码如下:
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView iv = (ImageView) findViewById(R.id.iv);
        // 图片合成-画布 先去画A 再去画B
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
                R.drawable.test); // bitmap为只读的
        Bitmap alterBitmap = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), bitmap.getConfig());
        Canvas canvas = new Canvas(alterBitmap);
        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        canvas.drawBitmap(bitmap, new Matrix(), paint);
        Bitmap ic_luncher = BitmapFactory.decodeResource(getResources(),
                R.drawable.ic_launcher);
        canvas.drawBitmap(ic_luncher, new Matrix(), paint);
        iv.setImageBitmap(alterBitmap);
    }
}
最后的效果如下:

打开android手机的API Demo图标

选择Graphics,接着选择Xfermodes,如下:

这里显示了各种图片合成后的模式,我们可以在代码中实现,这里采用DARKEN模式,代码如下:
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView iv = (ImageView) findViewById(R.id.iv);
        // 图片合成-画布 先去画A 再去画B
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
                R.drawable.test); // bitmap为只读的
        Bitmap alterBitmap = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), bitmap.getConfig());
        Canvas canvas = new Canvas(alterBitmap);
        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));
        canvas.drawBitmap(bitmap, new Matrix(), paint);
        Bitmap ic_luncher = BitmapFactory.decodeResource(getResources(),
                R.drawable.ic_launcher);
        canvas.drawBitmap(ic_luncher, new Matrix(), paint);
        iv.setImageBitmap(alterBitmap);
    }
}
效果如下:

Android 图片的合成的更多相关文章
- Android图片的合成示例
		package com.example.demo; import android.os.Bundle; import android.app.Activity; import android.grap ... 
- Android 图片合成:添加蒙板效果 不规则相框 透明度渐变效果的实现
		Android 图片合成:添加蒙板效果 不规则相框 透明度渐变效果的实现 暂时还未有时间开发这效果,所以先贴出来. 先贴一张效果图,这是一张手机截屏: 左上方的风景图:背景图片 右上方的人物图:前景图 ... 
- Android图片缓存之初识Glide
		前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ... 
- 安卓高级 Android图片缓存之初识Glide
		前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ... 
- Android图片缓存之Lru算法
		前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ... 
- Android图片处理
		相信做Android开发的小伙伴对于Android图片压缩.裁剪一定有很深的印象,今天我将带领大家一起学习一下这个看着高深莫测的知识,以便再以后的学习.工作中可以帮助到大家. 首先我们看一下这个问题出 ... 
- Android图片缓存之Glide进阶
		前言: 前面学习了Glide的简单使用(Android图片缓存之初识Glide),今天来学习一下Glide稍微复杂一点的使用. 图片缓存相关博客地址: Android图片缓存之Bitmap详解 And ... 
- Android图片缓存之Bitmap详解
		前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ... 
- Android  图片压缩、照片选择、裁剪,上传、一整套图片解决方案
		1.Android一整套图片解决方案 http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820998&idx=1& ... 
随机推荐
- 分享本年度最佳的15个 Photoshop 实例教程
			毫无疑问,Photoshop 是任何其类型的设计相关工作的最佳工具.有这么多东西,你可以用它来设计,发挥你的想象力,一切皆有可能. 现在,几乎所有的封面图像都会用 Photoshop 来修饰. 您可能 ... 
- 功能齐全并且比较时髦的Jquery通用开源框架之【ejq.js】
			简介 ejq是一款非常小巧的JS工具库,未压缩才50K,在jquery的基础上对jquery缺失部分作了很好的弥补作用. 优点: 1.具有内置的模板解析引擎语法和angularjs相近减少学习成本 2 ... 
- Moon.Orm 5.0(MQL版)及之前版本的开源计划
			开源综述:步步开源 Moon.Orm 5.0 (MQL版) 版本维护及下载 (跟踪发布) Moon.Orm 5.0系列文章 Moon.Orm 5.0性能问题,将发言权交给你! 一.5.0目前的情况,步 ... 
- 问得最多的十个JavaScript前端面试问题
			我知道有很多人不同意这种类型的面试.其实不管你喜不喜欢,你都得接受.尤其当你是自学的,而且要申请第一份工作时. 我估计很多有人其它方法来证明他自己,像Github/ 项目地址可能是非常理想的证明方 ... 
- 【转载】使用Lucene.NET实现数据检索功能
			1.索引的管理 //指定索引库文件存放文件位置 FSDirectory directory = FSDirectory.Open(new DirectoryInfo(this.IndexDataDir ... 
- Android发送短信
			// 发送短信 public void sendMsg(){ String content = edtSend.getText().toString(); SmsManager smsManager ... 
- Calling startActivity() from outside of an Activity
			在Activity中使用startActivity()方法不会有任何限制,因为Activity重载了Context的startActivity()方法.但是如果是在其他地方(如Widget或Servi ... 
- 数据库SQL server规则的创建、查看、修改和规则的绑定与松绑、删除
			用CREATE RULE语句创建规则 创建雇佣日期规则 hire_date_rule CREATE RULE hire_date_rule AS @hire_date>='1980-01-01' ... 
- python mysql Connect Pool mysql连接池 (201
			easy_install mysql-connector-python >>>import mysql.connector as conner >>> conn ... 
- XE8 FMX SpeedButton 大图标(改 Style)
			自从 XE8 提供 ImageList 带来了很多便利,但 SpeedButton 的图标太小(不够大气),还好 FMX 提供了 Style 可供使用者自订图标大小及显示位置,请自行按图索骥,做一遍: ... 
