安卓中采用的是png格式,采用的是ARGB,一个像素占4个字节;


图片缩放步骤:获取图像的分辨率,手机的分辨率,计算缩放比;


//------------------缩放图片显示-----------------    public  void suofangImage(){        ///       WindowManager mage= (WindowManager) getSystemService(WINDOW_SERVICE);//过时的       //      int height =  mage.getDefaultDisplay().getHeight();//获取高//int  width=mage.getDefaultDisplay().getWidth();        //新的        Point point=new Point();        mage.getDefaultDisplay().getSize(point);int width=point.x;int height=point.y;        ImageView imgaV=findViewById(R.id.imagev);        //获取图片的宽高        //创建一个位图工厂配置参数        BitmapFactory.Options options=new BitmapFactory.Options();        //解码器不去真正的解析位图,但是还能获取图片的款和高        options.inJustDecodeBounds=true;        BitmapFactory.decodeFile("/mnt/sdcard/dog.png");        //获取图片的宽和高        int iH=options.outHeight;        int iW=options.outWidth;        //计算缩放比        int scale=1;        int scaleX=iW/width;        int scaleY=iH/height;        if(scaleX>=scaleY && scaleX>scale){            scale=scaleX;        }else if(scaleXscale){            scale=scaleY;        }//按照缩放比显示        options.inSampleSize=scale;       //解析位图        options.inJustDecodeBounds=false;        Bitmap bitmap=BitmapFactory.decodeFile("/mnt/sdcard/dog.png",options);        //显示图片        imgaV.setImageBitmap(bitmap);    }

--------------绘制图片、修改图片--------

 //修改操作图片    public  void changeImage(){        ImageView imgaV=findViewById(R.id.imagev);                Bitmap scrBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher_background);//直接把图拖进工程中哪图片//创建原图的副本    Bitmap copYBit=  Bitmap.createBitmap(scrBitmap.getWidth(),scrBitmap.getHeight(),scrBitmap.getConfig());//创建一个模板,相当于一张白纸      //制作一个画笔        Paint paint=new Paint();        //制作画布        Canvas canvas=new Canvas(copYBit);//开始画图//画了一个和原始图一样的图片//图形处理的api***********//旋转        Matrix matrix=new Matrix();//        matrix.setRotate(20,scrBitmap.getWidth()/2,scrBitmap.getHeight()/2);//第一个是旋转角度,后面两个参数是坐标的想,y轴        //缩放//matrix.setScale(0.5f,0.5f);        //平移matrix.setTranslate(20,30);        //镜面-(左右翻转)---就是缩放和平移的结合matrix.setScale(-1.0f,1.0f);matrix.postTranslate(scrBitmap.getWidth()/2,0);//postTranslate是在上一次的基础上再次翻转,setTranslate的操作每次都是最新的,会覆盖上次的操作        //倒影-(上下翻转)---就是缩放和平移的结合        matrix.setScale(1.0f,-1.0f);        matrix.postTranslate(0,scrBitmap.getHeight()/2);        canvas.drawBitmap(scrBitmap,new Matrix(),paint); //第二个参数是矩阵        //操作画出来的图片        copYBit.setPixel(20,30, Color.RED);//在20,30这个坐标颜色修改成红色        imgaV.setImageBitmap(copYBit);    }
-------------小画板-------------

并保存到sd卡

  public  void changeImage(){        imgaV = findViewById(R.id.imagev);        Bitmap scrBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher_background);//直接把图拖进工程中哪图片//创建原图的副本        final Bitmap copYBit=  Bitmap.createBitmap(scrBitmap.getWidth(),scrBitmap.getHeight(),scrBitmap.getConfig());//创建一个模板,相当于一张白纸                //制作一个画笔        final Paint paint=new Paint();        paint.setColor(Color.RED);//画笔颜色改成红色        paint.setStrokeWidth(20);//画笔笔尖宽度        //制作画布        final Canvas canvas=new Canvas(copYBit);//开始画图//画了一个和原始图一样的图片//图形处理的api***********//旋转        Matrix matrix=new Matrix();//        matrix.setRotate(20,scrBitmap.getWidth()/2,scrBitmap.getHeight()/2);//第一个是旋转角度,后面两个参数是坐标的想,y轴        //缩放//matrix.setScale(0.5f,0.5f);        //平移        matrix.setTranslate(20,30);        //镜面-(左右翻转)---就是缩放和平移的结合        matrix.setScale(-1.0f,1.0f);        matrix.postTranslate(scrBitmap.getWidth()/2,0);//postTranslate是在上一次的基础上再次翻转,setTranslate的操作每次都是最新的,会覆盖上次的操作        //倒影-(上下翻转)---就是缩放和平移的结合        matrix.setScale(1.0f,-1.0f);        matrix.postTranslate(0,scrBitmap.getHeight()/2);        canvas.drawBitmap(scrBitmap,new Matrix(),paint); //这是画了一张图,第二个参数是矩阵        canvas.drawLine(20,30,40,50,paint);//画一条线,开始点和结束点        //操作画出来的图片        copYBit.setPixel(20,30, Color.RED);//在20,30这个坐标颜色修改成红色//吧图片保存到手机sd卡************        File file=new File(Environment.getExternalStorageDirectory().getPath(), SystemClock.uptimeMillis()+"png");        FileOutputStream fos= null;        try {            fos = new FileOutputStream(file);        } catch (FileNotFoundException e) {            e.printStackTrace();        }        /*        * 第一个参数是保存图片的格式        * 第二个图片是保存图片的质量,0-100,0最小,100最大        *        * SystemClock.uptimeMillis()是当前手机的开机时间        *        * */        copYBit.compress(Bitmap.CompressFormat.PNG,100,fos);        //发送一条广播欺骗系统图库的应用        Intent intent=new Intent();        intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));        sendBroadcast(intent);                        //给iamgeview设置触摸事件        imgaV.setOnTouchListener(new View.OnTouchListener() {            private int startY;            private int startX;            @Override            public boolean onTouch(View view, MotionEvent motionEvent) {                int action = motionEvent.getAction();//获取当前事件的类型                switch (action){                    case MotionEvent.ACTION_DOWN://按下                        //获取开始位置                        startX = (int) motionEvent.getX();                        startY = (int) motionEvent.getY();                        break;                    case MotionEvent.ACTION_MOVE://移动                        //获取结束的位置                        int endX= (int) motionEvent.getX();                        int endY= (int) motionEvent.getY();                        canvas.drawLine(startX, startY,endX,endY,paint);                        //再次显示到imagev上,                        imgaV.setImageBitmap(copYBit);                        //更新一下开始的坐标                        startX=endX;                        startY=endY;                        break;                    case MotionEvent.ACTION_UP://抬起                        break;                    case MotionEvent.ACTION_CANCEL://取消                        break;                }                return true;//true监听器处理完事件了            }        });    }


更多相关文章

  1. [Android]网页内图片点击查看大图/识别二维码/下载
  2. Android(安卓)打开相册选择单张图片实现代码
  3. Android中ConvenientBanner的使用
  4. Android(安卓)学习笔记(十五):Activity-GalleryView
  5. 6.22 android计算字符高度宽度,红蓝3D图片的制作原理及NDK生成实
  6. 学习笔记-android imageSwitcher使用
  7. android打开存储卡(TF卡\SD卡)中的sqlite文件
  8. 图片加载和处理的又一个神器 Fresco 的使用摘要记录
  9. android 拍照图片旋转问题

随机推荐

  1. Android(安卓)Launcher研究(一)---------
  2. 用Android代码实现自动打开USB调试
  3. Android请求网络有三种方式:HttpURLConnec
  4. Android: 自定义Tab样式
  5. Android开发者指南(10) —— Android(安
  6. Android动态加载――加载已安装APK中的类
  7. Android(安卓)AlarmManager的取消
  8. [置顶] Android开发之动态库调用
  9. android点滴(8) -- android应用程序的生
  10. Android的onCreateOptionsMenu()创建菜单