zoukankan      html  css  js  c++  java
  • android中的图片处理

    大图片处理


    大图片处理是将原来像素高的转换为像素低的图片,比如原来图片是1024*768的,而手机屏幕是800*600的,这时候就需要进行转换。转换的方式很简单就是等比例缩放。

    package xidian.dy.com.chujia;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.os.Environment;
    import android.support.v7.app.AppCompatActivity;
    import android.view.Display;
    import android.view.View;
    import android.widget.ImageView;
    
    import java.io.File;
    
    public class MainActivity extends AppCompatActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
    
        public void load(View v){
            BitmapFactory.Options options = new BitmapFactory.Options();
            File file = new File(Environment.getExternalStorageDirectory(), "a.dog");
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(file.toString(), options);
            //获取图片宽高
            int imgWidth = options.outWidth;
            int imgHeight = options.outHeight;
            //获取屏幕宽高
            Display dsp = getWindowManager().getDefaultDisplay();
            int screanWidth = dsp.getWidth();
            int screanHeight = dsp.getHeight();
            //计算缩放比例
            int scaleWidth = imgWidth / screanWidth;
            int scaleHeight = imgHeight / screanHeight;
            int scale = scaleHeight >= scaleWidth ? scaleHeight:scaleWidth;
            if(scale < 1)
                scale = 1;
            //设置缩放比例(scale应大于1缩放才能其作用)
            options.inSampleSize = scale;
            options.inJustDecodeBounds = false;
            Bitmap bm = BitmapFactory.decodeFile(file.toString(), options);
    
            ImageView img = (ImageView) findViewById(R.id.iv);
            if(img != null)
                img.setImageBitmap(bm);
        }
    }

    图片副本


    创建图片副本是为了对图片进行修改,下面的代码将图片进行了水平反转

    package xidian.dy.com.chujia;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.ImageView;
    
    public class MainActivity extends AppCompatActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Bitmap bm = BitmapFactory.decodeFile("/sdcard/a.dog");
            //创建一个与原图等宽高的bitmap对象,可以看作是画纸
            Bitmap bmcpy = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(),bm.getConfig());
    
            //创建画笔对象
            Paint paint = new Paint();
            //创建画板对象,将画纸铺在画板上
            Canvas canvas = new Canvas(bmcpy);
            //开始作画
            //将图片水平翻转
            Matrix mt = new Matrix();
            mt.setScale(-1, 1);
            mt.postTranslate(bmcpy.getWidth(), 0);
            canvas.drawBitmap(bm, mt, paint);
            ImageView iv = (ImageView) findViewById(R.id.iv2);
            iv.setImageBitmap(bmcpy);
            ImageView iv1 = (ImageView) findViewById(R.id.iv1);
            iv1.setImageBitmap(bm);
        }
    }

     画画


    让用户在画板上作画

    package xidian.dy.com.chujia;
    
    import android.content.Intent;
    import android.graphics.Bitmap;
    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.os.Environment;
    import android.support.v7.app.AppCompatActivity;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.ImageView;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    
    public class MainActivity extends AppCompatActivity {
        int preX,preY;
        Bitmap bmcpy;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
            bmcpy = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), bm.getConfig());
            final Paint paint = new Paint();
            final Canvas canvas = new Canvas(bmcpy);
            //设置画笔的颜色为红色
            paint.setColor(Color.RED);
            canvas.drawBitmap(bm, new Matrix(), paint);
            final ImageView iv = (ImageView) findViewById(R.id.iv);
            iv.setImageBitmap(bmcpy);
            if(iv != null)
                iv.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        int action = event.getAction();
                        switch (action) {
                            case MotionEvent.ACTION_DOWN:
                                preX = (int) event.getX();
                                preY = (int) event.getY();
                                break;
                            case MotionEvent.ACTION_UP:
                                break;
                            case MotionEvent.ACTION_MOVE:
                                int x = (int) event.getX();
                                int y = (int) event.getY();
                                canvas.drawLine(preX, preY, x, y, paint);
                                iv.setImageBitmap(bmcpy);
                                preX = x;
                                preY = y;
                                break;
                        }
                        return true;
                    }
                });
        }
    
        //将画好的图片进行保存
        public void save(){
            File file = new File("/sdcard/tmp.png");
            try {
                FileOutputStream fos = new FileOutputStream(file);
                bmcpy.compress(Bitmap.CompressFormat.PNG,10,fos);
                Intent intent = new Intent();
                //发出SDcard挂载广播来刷新MediaStore数据库
                intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
                intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
                startActivity(intent);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    django控制台输出sql日志
    Find概述
    命令大全
    京东智联云在 Serverless 的探索
    如何优雅地部署一个 Serverless Next.js 应用
    腾讯云 Serverless 保障《创造营》硬糖少女 C 位出道
    Serverless 应用实践及典型案例解析
    LeetCode 数组:62. 不同路径(动态规划 带记忆的递归)
    LeetCode 数组:56.合并区间(数组的自带排序函数 区间合并问题)
    LeetCode 数组:162. 寻找峰值(二分法)
  • 原文地址:https://www.cnblogs.com/xidongyu/p/5685796.html
Copyright © 2011-2022 走看看