做照片相框

步骤就是跟美图秀秀一样,先截图,然后添加相框

在之前Bitmap.createBitmap那个文里,说过使用jpg图片会挡住底层图片,用画这种方法合成图片,没有问题。

public class MainActivity extends Activity implements OnClickListener{

private static final String TAG = "blueweb";

private LinearLayout layout_btnGroup;

private int paintY;// layout_btnGroup高度

private Button selectImageBtn;

private Button cutImageBtn;

private Button btn_ouerlay;

private ImageView imageView;

private Bitmap cutBmp;// 裁剪得到的Bitmap

private Bitmap chooseBmp;// 选择相框的Bitmap

private Canvas canvas;

private Paint paint;

private boolean onePicked = false;

private boolean twoPicked = false;

private static final int  IMAGE_SELECT = 1;

private static final int  IMAGE_CUT = 2;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

layout_btnGroup = (LinearLayout) findViewById(R.id.layout_btnGroup);

selectImageBtn = (Button) findViewById(R.id.btn_chooseimg);

cutImageBtn = (Button) findViewById(R.id.btn_cutimg);

btn_ouerlay = (Button) findViewById(R.id.btn_addoverlay);

imageView = (ImageView) findViewById(R.id.image);

selectImageBtn.setOnClickListener(this);

cutImageBtn.setOnClickListener(this);

btn_ouerlay.setOnClickListener(this);

paintY = layout_btnGroup.getHeight();

}

public void onClick(View v) {

Intent intent;

switch(v.getId()){

case R.id.btn_chooseimg:

intent = new Intent(Intent.ACTION_PICK,

android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

startActivityForResult(intent, IMAGE_SELECT);

break;

case R.id.btn_cutimg:

intent = getImageClipIntent();

startActivityForResult(intent, IMAGE_CUT);

break;

case R.id.btn_addoverlay:

Toast.makeText(this, "点击了Btn", Toast.LENGTH_SHORT).show();

chooseBmp = BitmapFactory.decodeResource(getResources(), R.drawable.img_overlay);

if (chooseBmp != null){

twoPicked = true;

if (onePicked == true && twoPicked == true){

Bitmap drawingBitmap = Bitmap.createBitmap(cutBmp.getWidth(), cutBmp.getHeight(), cutBmp.getConfig());

canvas = new Canvas(drawingBitmap);

paint = new Paint();

canvas.drawBitmap(cutBmp, 0, paintY, paint);

paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.MULTIPLY));

canvas.drawBitmap(chooseBmp, 0, paintY, paint);

Log.d(TAG, paintY + "");

imageView.setImageBitmap(drawingBitmap);

}

}else {

Toast.makeText(this, "添加相框失败", Toast.LENGTH_SHORT).show();

}

break;

}

}

/**

* 获取剪切后的图片

*/

public static Intent getImageClipIntent() {

Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);

intent.setType("image/*");

intent.putExtra("crop", "true");

intent.putExtra("aspectX", 1);//裁剪框比例

intent.putExtra("aspectY", 1);

intent.putExtra("outputX", 200);//输出图片大小

intent.putExtra("outputY", 300);

intent.putExtra("return-data", true);

return intent;

}

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

if(resultCode == RESULT_OK){

if(requestCode == IMAGE_SELECT){

Uri imageFileUri = intent.getData();

int dw=getWindowManager().getDefaultDisplay().getWidth();

int dh=getWindowManager().getDefaultDisplay().getHeight()/2;

//已屏幕宽 和一般的高作为图片显示的最大尺寸

try{

BitmapFactory.Options factory = new BitmapFactory.Options();

factory.inJustDecodeBounds = true; //当为true时  允许查询图片不为 图片像素分配内存

cutBmp = BitmapFactory.decodeStream(getContentResolver()

.openInputStream(imageFileUri),null,factory);

int hRatio = (int)Math.ceil(factory.outHeight/(float)dh); //图片是高度的几倍

int wRatio = (int)Math.ceil(factory.outWidth/(float)dw); //图片是宽度的几倍

System.out.println("hRatio:"+hRatio+"  wRatio:"+wRatio);

//缩小到  1/ratio的尺寸和 1/ratio^2的像素

if(hRatio>1 || wRatio>1){

if(hRatio > wRatio){

factory.inSampleSize = hRatio;

}

else

factory.inSampleSize = wRatio;

}

factory.inJustDecodeBounds = false;

cutBmp = BitmapFactory.decodeStream(getContentResolver()

.openInputStream(imageFileUri),null,factory);

if (cutBmp != null){

onePicked = true;

imageView.setImageBitmap(cutBmp);

}else {

Toast.makeText(this, "选择图片失败", Toast.LENGTH_SHORT).show();

}

}catch(Exception ex){

}

}

else if(requestCode == IMAGE_CUT){

cutBmp = intent.getParcelableExtra("data");

if (cutBmp != null){

onePicked = true;

imageView.setImageBitmap(cutBmp);

}else {

Toast.makeText(this, "获取裁剪图片失败", Toast.LENGTH_SHORT).show();

}

}

}

}

}

布局文件

xmlns:tools="http://schemas.android.com/tools"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

tools:context=".MainActivity" >

android:id="@+id/layout_btnGroup"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="vertical" >

android:id="@+id/btn_chooseimg"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="选择图片" />

android:id="@+id/btn_cutimg"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="选择图片裁剪" />

android:id="@+id/btn_addoverlay"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="添加相框" />

android:layout_weight="1"

android:id="@+id/image"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:src="@drawable/ic_launcher" />

先点击选择图片裁剪,然后点击添加相框。效果如下,只是做了基本的原理,以后有时间会改一下代码再更新

android 调用图片裁剪功能,Android图片裁剪,合成(调用系统裁剪功能)相关推荐

  1. 国际短信系统平台软件源码开发路由功能—移讯云短信系统

    国际短信系统平台软件源码开发路由功能-移讯云短信系统 客户端功能介绍 1: 发送短信模块: 自定义号码短信,通讯录短信,资源短信. 2:提交任务模块: 查询当前登录账号提交的短信 3:短信明细模块: ...

  2. 记账本系统的功能结构图

    记账本系统的功能结构图通常包括以下几个部分: 用户管理模块: 包含用户注册.登录.修改密码等功能. 记账模块: 包含添加收支明细.查看收支明细.统计收支.生成报表等功能. 报表模块: 包含生成并展示收 ...

  3. 采用QSystemTrayIcon实现系统托盘功能

    在应用程序关闭的时候最小化到系统托盘,想必大家都见过这个功能.如何用QSystemTrayIcon实现系统托盘功能呢?QT的源码里面有详细的例子,但是代码比较繁琐.我根据自己的经验将主要实现过程作简化 ...

  4. android 调用系统的剪切功能,Android实现图片的裁剪(不调用系统功能)

    上一篇文章提及了通过调用系统相册或拍照来实现图片的缩放\裁剪.不过这对于笔者项目的要求同样不适合,笔者需要的是通过对手机屏幕整个进行一个截图,并对这个截图进行裁剪操作. 依靠系统功能确实可以实现图片的 ...

  5. android调用系统裁剪图片 返回模糊 不清晰的问题

    基本这个功能都是在头像设置的时候会用到 Android 从相机拍完照片 然后跳去系统自带的裁剪 或者从相册选取图片裁剪  然后把裁剪好的图片设置成头像 这里直接贴上跳到裁剪部分的代码 private ...

  6. Android拍照和相册+系统裁剪功能返回图片

    最近在使用一加3手机,Android系统6.0,进行测试的时候,发现调用手机的拍照和相册选择图片的功能返回的时候都无法调用系统的裁剪功能,Log日志也没有输出有用的信息.经过在网上大量的查找资料,拍照 ...

  7. android裁剪图片功能,Android实现图片区域裁剪功能

    今天做的就是关于实现图片的区域裁剪功能.由于项目功能的需要笔者需要实现PDF文档的阅读,并且就某个页面实现"图片"裁剪(一个页面理解为一张图片).笔者对着方面是一点儿也不熟悉,因此 ...

  8. android裁剪图片功能,Android实现拍照、选择图片并裁剪图片功能

    一. 实现拍照.选择图片并裁剪图片效果 按照之前博客的风格,首先看下实现效果. 二. uCrop项目应用 想起之前看到的Yalantis/uCrop效果比较绚,但是研究源码之后发现在定制界面方面还是有 ...

  9. android裁剪图片功能,Android通过ClipDrawable实现图片裁剪功能

    前言 最近需要实现一个显示下载进度的功能,下载进度的实现很简单,用ProgressBar就可以,但我想尝试通过图片裁剪来实现,学习一下ClipDrawable这个类的使用. ClipDrawable简 ...

最新文章

  1. 给gridview添加上下移动功能
  2. 读WEB标准和网站重构后的一些感想
  3. .NET读写Excel工具Spire.Xls使用(1)入门介绍
  4. 小红书去水印代码_小红书关键词排名如何进行优化
  5. 【网络基础】 PAUSE帧总结
  6. 华三服务器收集系统日志,Rsyslog+H3C日志系统(示例代码)
  7. lync登录时一直停留在登录界面
  8. 实用工具网站(经纬度、短链接、图片格式转换、长微博、图片压缩、uuid、繁体字、md5破解)
  9. HTML+CSS 整站 步骤
  10. 透過 OpenNI / NITE 分析人體骨架(上)
  11. 144项PPT制作计划(精化)
  12. 数字化让企业精益管理梦成真,技术成核心驱动
  13. 多可文档管理系统_您的框架有多可扩展性?
  14. PDF文件页面如何提取
  15. 浅谈Android之SurfaceFlinger相关介绍(一)
  16. Vue进阶(幺柒零):前端用户体验提升(四)应用 rem/em 实现字体自适应
  17. metashape(photosan)集群设置
  18. java 基本语法
  19. Python并发之协程gevent数据结构和实践(6)
  20. 涨停板第二天开盘的三种操作方法

热门文章

  1. 单片机与晶振到底有什么关系?
  2. 最实用的虚拟声卡-Windows安装虚拟声卡(有效解决PR音频输入,AU录音,obs多音频原控制等问题)
  3. python爬取数据保存为txt格式
  4. 深度学习(三)denoise autoencoder的Python实现
  5. php图片搜索引擎,Everypixel:基于人工智能的图片搜索引擎
  6. 5款绝赞的电脑软件,建议收藏
  7. 小程序源码:炫酷手持滚动弹幕生成小工具
  8. Nikola学习笔记
  9. 吴恩达机器学习课程笔记——第一周
  10. 操作系统第一章操作系统引论习题及答案