像Ps上的应用一样,我们加载一个图片然后在上面增加各种我们需要的挂件,文字效果等。我们今天完成一个简单的Demo

package com.example.fingerdraw;import java.io.FileNotFoundException;
import java.io.OutputStream;import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore.Images.Media;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;public class MainActivity extends Activity implements OnTouchListener,OnClickListener {private ImageView image;private Paint paint;private Canvas canvas;private Bitmap bitmap;private Bitmap alterBitmap;private Button choose;private Button save;private final static int RESULT = 0;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);image = (ImageView) findViewById(R.id.image);choose = (Button) findViewById(R.id.chooseButton);save=(Button)findViewById(R.id.saveButton);/** bitmap = Bitmap.createBitmap(getWindowManager().getDefaultDisplay()* .getWidth(), getWindowManager().getDefaultDisplay().getHeight(),* Bitmap.Config.ARGB_8888); canvas = new Canvas(bitmap);// 画板 paint =* new Paint();// 画刷 paint.setColor(Color.BLUE);* image.setImageBitmap(bitmap);*/image.setOnTouchListener(this);choose.setOnClickListener(this);save.setOnClickListener(this);}private float downx = 0;private float downy = 0;private float upx = 0;private float upy = 0;public boolean onTouch(View v, MotionEvent event) {int action = event.getAction();switch (action) {case MotionEvent.ACTION_DOWN:downx = event.getX();downy = event.getY();break;case MotionEvent.ACTION_MOVE:// 路径画板upx = event.getX();upy = event.getY();canvas.drawLine(downx, downy, upx, upy, paint);image.invalidate();downx = upx;downy = upy;break;case MotionEvent.ACTION_UP:// 直线画板
upx = event.getX();upy = event.getY();canvas.drawLine(downx, downy, upx, upy, paint);image.invalidate();// 刷新break;default:break;}return true;}public void onClick(View arg0) {if(arg0==choose){Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);startActivityForResult(intent, RESULT);}else if(arg0==save){//保存画好的图片if(alterBitmap!=null){try {Uri imageUri=getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues());OutputStream outputStream=getContentResolver().openOutputStream(imageUri);alterBitmap.compress(CompressFormat.PNG, 90, outputStream);Toast.makeText(getApplicationContext(), "save!", Toast.LENGTH_SHORT).show();} catch (FileNotFoundException e) {e.printStackTrace();}}}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK) {Uri imageFileUri = data.getData();Display display = getWindowManager().getDefaultDisplay();float dw = display.getWidth();float dh = display.getHeight();try {BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, options);int heightRatio = (int) Math.ceil(options.outHeight / dh);int widthRatio = (int) Math.ceil(options.outWidth / dw);if (heightRatio > 1 && widthRatio > 1) {if (heightRatio > widthRatio) {options.inSampleSize = heightRatio;} else {options.inSampleSize = widthRatio;}}options.inJustDecodeBounds = false;bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, options);alterBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), bitmap.getConfig());canvas = new Canvas(alterBitmap);paint = new Paint();paint.setColor(Color.GREEN);paint.setStrokeWidth(10);Matrix matrix = new Matrix();canvas.drawBitmap(bitmap, matrix, paint);image.setImageBitmap(alterBitmap);image.setOnTouchListener(this);} catch (FileNotFoundException e) {e.printStackTrace();}}}}



效果:

转载于:https://www.cnblogs.com/hexiaochun/archive/2012/10/08/2715832.html

android 加载图片并在上面画图相关推荐

  1. Android加载图片内存溢出问题解决方法

    这篇文章主要介绍了Android加载图片内存溢出问题解决方法,本文讲解使用BitmapFactory.Options解决内存溢出问题,需要的朋友可以参考下 1. 在Android软件开发过程中,图片处 ...

  2. canny算法的实现(android加载图片,数组写入文件换行)

    Canny边缘检测首先要对图像进行高斯去噪,前面讲到了高斯去噪处理,这里从对图像灰度进行微分运算讲起吧.微分运算常用的方法是利用模板算子,把模板中心对应到图像的每一个像素位置,然后按照模板对应的公式对 ...

  3. Android加载图片OOM错误解决方式

    前几天做项目的时候,甲方要求是PAD (SAMSUNG P600 10.1寸 2560*1600)的PAD上显示高分辨率的大图片. SQLITE採用BOLD方式存储图片,这个存取过程就不说了哈,网上一 ...

  4. 图片--Android加载图片导致内存溢出(Out of Memory异常)

    Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory  Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...

  5. Android加载图片导致内存溢出(Out of Memory异常)

    Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory  Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...

  6. 专为Android加载图片Fresco:详细图解SimpleDraweeView加载图片基础

    Fresco简单的使用-SimpleDraweeView 百学须先立志-学前须知: 在我们平时加载图片(不管是下载还是加载本地图片-..)的时候,我们经常会遇到这样一个需求,那就是当图片正在加载时应该 ...

  7. android 加载图片黑屏,Android 中启动页黑屏及白屏的解决方式

    启动页黑屏或白屏的原因是,当Activity启动的时候不能马上加载layout. 而黑屏或者白屏是你的theme主题的默认样式,当layout没加载出来就显示黑屏或者白屏. 1.windowBackg ...

  8. Android 加载图片G lide的基本用法

    Glide 是Android开发中常用的图片解析框架,它的功能强大,并且使用简单,下面我就介绍一下如何使用. 首先需要添加依赖 Glid解析图片(必须添加) compile 'com.github.b ...

  9. android 加载图片进度条,ImageView上的Android进度条

    我正在开发一个应用程序,用户将从相机拍摄图片并将其显示在具有图像视图的预览屏幕上. **CameraCapture.java** class ButtonClickHandler implements ...

最新文章

  1. 山东计算机基础模拟题及答案,2016山东农信社考试模拟题--计算机基础知识答案(1)...
  2. 灰度图像的对数变换原理及OpenCV代码实现
  3. 适合程序员的耳机_为什么很多程序员工作时都戴耳机?
  4. php读取excel的数据,php读取excel文件数据
  5. nodejs ftp文件服务器,node.js自动上传ftp的脚本分享
  6. Kubernetes Resource QoS Classes介绍
  7. ROS下sensor_msgs::ImagePtr到sensor_msgs::Image之间的转换
  8. 安装包时后面的参数以及简写
  9. 图片怎么转换到Excel表格?偷偷安利一个好用的方法
  10. java实现光盘摆渡_一种光盘摆渡机的制作方法
  11. Apache Hive 垃圾回收
  12. 八皇后问题解法大全及编写八皇后小游戏
  13. 利用python进行显著性分析
  14. 云虚拟主机数据库连接和url重写
  15. 备考通信复试过程中的一些知识点总结梳理——信道编码
  16. Vue在浏览器报错Uncaught Error: Cannot find module ‘[object Object]‘
  17. C# 类实现接口(Interface) 多态 多继承
  18. 还原SQL数据库,执行 Transact-SQL 语句或批处理时发生了异常
  19. 局域网的ROS中设置花生壳
  20. java 读取ppt文件_Java 读取PPT文档属性

热门文章

  1. 深入分析Ribbon源码分析
  2. redis数据类型hash总结
  3. solr-4.10.3.tgz.tgz下载
  4. iis6 无法访问网站_IIS重启无效
  5. PHP Fatal error: Class 'com' not found in ... 的处理办法
  6. 总结php删除html标签和标签内的内容的方法
  7. 爱立信首席执行官卫翰思离职 投资者已失去耐性
  8. 数据库订单表状态字段值设计的一些思考
  9. Mac OS X将CSV格式转换为Excel文档格式,Excel转CSV中文乱码问题
  10. css transition过渡