图片加载到内存、原图实现画画、扒衣服
来源:互联网 发布:mac新浪微博客户端 编辑:程序博客网 时间:2024/04/19 09:06
public class MainActivity extends Activity { private ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.iv); } public void click(View view){ //相当消耗内存资源 根据图片的分辨率而定 // Bitmap bitmap = BitmapFactory.decodeFile("/mnt/sdcard/photo.jpg"); // iv.setImageBitmap(bitmap); //1.得到屏幕的宽高信息 WindowManager wm = getWindowManager(); int screenWidth = wm.getDefaultDisplay().getWidth(); int screenHeight = wm.getDefaultDisplay().getHeight(); System.out.println("屏幕宽高:"+screenWidth+"-"+screenHeight); //2.得到图片的宽高。 BitmapFactory.Options opts = new Options();//解析位图的附加条件 opts.inJustDecodeBounds = true;//不去解析真实的位图,只是获取这个位图的头文件信息 Bitmap bitmap = BitmapFactory.decodeFile("/mnt/sdcard/photo.jpg", opts); int bitmapWidth = opts.outWidth;//图片真实的宽度 int bitmapHeight = opts.outHeight; System.out.println("图片宽高: "+bitmapWidth+"-"+bitmapHeight); //3.计算缩放比例 int dx = bitmapWidth/screenWidth; int dy = bitmapHeight/screenHeight; int scale = 1; if(dx>dy&&dy>1){ System.out.println("按照水平方法缩放,缩放比例:"+dx); scale = dx; } if(dy>dx&&dx>1){ System.out.println("按照垂直方法缩放,缩放比例:"+dy); scale = dy; } //4.缩放加载图片到内存。 opts.inSampleSize = scale; opts.inJustDecodeBounds = false;//真正的去解析这个位图。 bitmap = BitmapFactory.decodeFile("/mnt/sdcard/photo.jpg", opts); iv.setImageBitmap(bitmap); }}读取存储卡权限: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
public class MainActivity extends Activity { private ImageView iv1, iv2; private Bitmap alterBitmap; private Bitmap srcBmp; /*********************/ private Bitmap basebBitmap; Canvas canvas1; Paint paint1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv1 = (ImageView) findViewById(R.id.iv1); iv2 = (ImageView) findViewById(R.id.iv2); // 给第一个imageview默认设置一个位图,从资源中加载一个图片 srcBmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); iv1.setImageBitmap(srcBmp); // 创建原图的一个副本。 可修改 创建的是一个空白的图形。 alterBitmap = Bitmap.createBitmap(srcBmp.getWidth() * 2, srcBmp.getHeight() * 2, srcBmp.getConfig()); /**************************************/ //画笔初始化 paint1 = new Paint(); paint1.setStrokeWidth(5); paint1.setColor(Color.GREEN); //创建一个 可以被修改的 bitmap 并且是空白的位图 basebBitmap = Bitmap.createBitmap(320,320, Bitmap.Config.ARGB_8888); canvas1 = new Canvas(basebBitmap);//准备一个画布,并在画布上铺好纸 ,canvas1:画板 basebBitmap相当于一张白纸 canvas1.drawColor(Color.WHITE);//前景 为白色 // 知道用户手指在屏幕上的移动的轨 迹 iv1.setOnTouchListener(new OnTouchListener() { int startX;//定义手指开始的坐标 int startY;//定义手指结束的坐标 @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN://用户手触摸屏幕时 // event.getRawX() 当前手指在屏幕上的位置,手指在窗体的位置,此时画的线和手指之间有很大的空隙 startX = (int) event.getX();//当前手指在控件上的位置 startY = (int) event.getY(); break; case MotionEvent.ACTION_MOVE://用户手移动时 int newX = (int) event.getRawX();//当前手指在屏幕上的位置 int newY = (int) event.getRawY(); canvas1.drawLine(startX, startY, newX, newY, paint1); //用户所画的内容在组件中显示 iv1.setImageBitmap(basebBitmap); break; case MotionEvent.ACTION_UP://用户手 离开时 break; default: break; } return false; } }); } /* * 将所画的内容保存起来 * */ public void save(View view){ try { File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg"); FileOutputStream outputStream = new FileOutputStream(file); basebBitmap.compress(CompressFormat.JPEG, 100, outputStream); //模拟一个消息 通知系统 sd卡 被重新挂载了 Intent intent2 = new Intent(); intent2.setAction(Intent.ACTION_MEDIA_MOUNTED); //告诉系统 哪个文件路径被 上善挂载了 intent2.setData(Uri.fromFile(Environment.getExternalStorageDirectory())); //发送一个广播通知系统,这样图库中就有所画的画了 sendBroadcast(intent2); } catch (FileNotFoundException e) { Toast.makeText(this, "保存图片失败", 0).show(); e.printStackTrace(); } Toast.makeText(this, "保存图片成功", 0).show(); } //从图库中选择 图片,并返回 public void image() { // 启动图库,并获取所选择的图片 Intent intent = new Intent(); intent.setAction(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent, 0); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // 图片的uri 路径 Uri uri = data.getData(); // 获取的是图库的缩略图 // Bitmap bitmap = data.getParcelableExtra("data"); // 显示在图片控件中 super.onActivityResult(requestCode, resultCode, data); } /*****************************/ /** * 创建原图 bm的一个拷贝。副本 在原图上画画 * * @param view */ public void click(View view) { // 1.准备一个画板 在上面放上准备好的 空白的位图 Canvas canvas = new Canvas(alterBitmap); // 2.准备一个画笔 Paint paint = new Paint(); paint.setColor(Color.BLACK); /** * 1.将画笔的颜色设为 透明 * 2.可以利用 帧布局, 下面一张图片,上面一张图片, * 3.即可 利用 画笔 实现 扒衣服的 效果 * */ paint.setColor(Color.TRANSPARENT);//画笔的颜色 设为透明, // 3.在画布 上 画画 Matrix m = new Matrix(); m.setScale(2.0f, 2.0f); canvas.drawBitmap(srcBmp, m, paint); //在原图上 画画 iv2.setImageBitmap(alterBitmap);// 把原图的副本设置到界面上。 }}
public class MainActivity extends Activity { private ImageView iv; // 可以修改的位图 private Bitmap alertBitmap; private Canvas canvas; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.iv); //原图 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pre); // 创建一个空白的原图的拷贝 alertBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig()); //要对图片进行一些缩放操作,避免 挂 掉 canvas = new Canvas(alertBitmap); Paint paint = new Paint(); paint.setColor(Color.BLACK); canvas.drawBitmap(bitmap, new Matrix(), paint);// new Matrix() :以原来的大小显示图片 iv.setImageBitmap(alertBitmap); iv.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN:// 手指按下屏幕 System.out.println("action down"); break; case MotionEvent.ACTION_MOVE:// 手指在屏幕上移动 int x = (int) event.getX(); int y = (int) event.getY(); System.out.println("设置("+x+","+y+")透明颜色"); //将手指所在的点 的 上下 都设置为 透明的 for(int i=-4;i<5;i++){ for(int j=-4;j<5;j++){ try{ //将手移动的位置 设置为 透明色 alertBitmap.setPixel(x+i, y+j, Color.TRANSPARENT); }catch (Exception e) { } } } //显示修改的图片 iv.setImageBitmap(alertBitmap); break; case MotionEvent.ACTION_UP:// 手指离开屏幕 MediaPlayer.create(getApplicationContext(), R.raw.higirl).start(); break; } return true;//可以重复循环的处理事件 } }); }}
0 0
- 图片加载到内存、原图实现画画、扒衣服
- Android:简单实现美女扒衣服小游戏
- Android Bitmap之擦掉图片(扒衣服)
- 19_Android中图片处理原理篇,关于人脸识别网站,图片加载到内存,图片缩放,图片翻转倒置,网上撕衣服游戏案例编写
- 19_Android中图片处理原理篇,关于人脸识别网站,图片加载到内存,图片缩放,图片翻转倒置,网上撕衣服游戏案例编写
- 扒美女衣服——妄撮游戏实现原理
- 加载图片到内存
- 图片加载到内存优化
- html5实现图片预览和查看原图
- html5实现图片预览和查看原图
- Android--加载大分辨率图片到内存
- Android 加载大分辨率图片到内存
- 17、加载大张图片到内存
- android 加载图片到内存(缩放)
- 缩放图片并加载到内存中
- android中加载本地图片到内存
- 缩放图片并加载到内存中
- Android--加载大分辨率图片到内存
- 最长递增子序列详解(longest increasing subsequence)
- Android应用接入微信开放平台
- 学习记录1
- 利用AbstractRoutingDataSource实现动态数据源切换
- 递归和迭代算法深入分析(入门篇)
- 图片加载到内存、原图实现画画、扒衣服
- 杭电1032——The 3n + 1 problem(简单题)
- java回调函数
- LEETCODE--Symmetric Tree
- 【面试】准备留着用
- layoutSubviews总结
- 【OpenCV人脸识别入门教程之四】LBP人脸识别
- 数据结构实验之二叉树七:叶子问题
- Julia: 引用与copy: 关于数组、自定义类型与初始化