android 画画

图片处理与展示技术详解
package com.lyz.news.day32madia;


import android.app.Activity;
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.view.View;
import android.widget.ImageView;

public class MainActivityCopyImage extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_copy);


    }

    public void onClick2(View v) {
      /*  Log.i("MainActivity","11111111111111111111111111111111111111111111111");
        BitmapFactory.Options options = new BitmapFactory.Options();
        //不为像素申请内存,只获取宽高
        options.inJustDecodeBounds = true;//只解析宽和高
//        拿到宽和高
        int imageWidth = options.outWidth;
        int imageheight = options.outHeight;
        //获取屏幕宽和高
        Display dp = getWindowManager().getDefaultDisplay();
        int width = dp.getWidth();
        int height = dp.getHeight();
        int scale=1;
        //计算比例
      int scaleWidth  =imageWidth/width;
        int scaleHeight  =imageheight/height;
// 下面这个括号要我穿一个Point,所以我们就传一个new Point()
        if (scale>=scaleHeight&&scale>=1){//如果小于1就是用缩放,已经很小了
            scale=scaleHeight;
        }else if (scale>=scaleWidth&&scale>=1){
            scale=scaleWidth;
        }
//        设置缩放比例
        options.inSampleSize=scale;
//        加载图片开始
        options.inJustDecodeBounds = false;*/
        //加载图片 Bitmap和decodeFile,这个bitmap现在是不能更改的,无法加特效,只能显示
        /**
         * 如果想改图片,需要在内存中生成一个副本也就一个拷贝,然后我们改拷贝,再把拷贝给显示出来
         * 我想给他加一个水印,其实我们看到已经不是原图,一个拷贝的图;原图是只读我们加载出来就扔了,
         * 这个原图是只读的,无法改
         */
        /**
         *创建图片 副本
         * 1,在内存中创建一个与原图一模一样的大小的bitmap对象,所以Config用原图的就行
         * 一般看返回值要看对象.方法()看方法的返回值是什么,这句返回值就是什么;
         */

        /**
         *
        bitmapCopy现在只是和srcbimap宽高一样但是它没有内容的,但是他是可读可写的,
         真的btn一点什么也不显示,但是btn被图片给遮住了,所名真的是显示出来但是什么也没有

          */
        Bitmap srcbitmap = BitmapFactory.decodeFile("sdcard/haha.jpg");
        Bitmap bitmapCopy = Bitmap.createBitmap(srcbitmap.getWidth(), srcbitmap.getHeight(), srcbitmap.getConfig());
            //2.创建画笔
        Paint paint=new Paint();
            //创建画板来画画,把白纸放上
        Canvas canvas=new Canvas(bitmapCopy);
            //开始画画把原图放在画板上srcbitmap, 相当于模特
        canvas.drawBitmap(srcbitmap,new Matrix(),paint);

        //加载图片 Bitmap和decodeFile
        ImageView mivone = (ImageView) findViewById(R.id.iv_one);
        ImageView mivtwo = (ImageView) findViewById(R.id.iv_two);
        mivone.setImageBitmap(srcbitmap);
        mivtwo.setImageBitmap(bitmapCopy);




    }

}

------------------------------、

package com.lyz.news.day32madia;


import android.app.Activity;
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.widget.ImageView;

public class MainActivityCmain extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_copy);
        /**
         * 如果想改图片,需要在内存中生成一个副本也就一个拷贝,然后我们改拷贝,再把拷贝给显示出来
         * 我想给他加一个水印,其实我们看到已经不是原图,一个拷贝的图;原图是只读我们加载出来就扔了,
         * 这个原图是只读的,无法改
         */
        Bitmap bmSrc = BitmapFactory.decodeFile("sdcard/dog.jpg");
        /**
         *创建图片 副本
         * 1,在内存中创建一个与原图一模一样的大小的bitmap对象,所以Config用原图的就行
         * 一般看返回值要看对象.方法()看方法的返回值是什么,这句返回值就是什么;
         */

        /**
         *
         bitmapCopy现在只是和srcbimap宽高一样但是它没有内容的,但是他是可读可写的,
         真的btn一点什么也不显示,但是btn被图片给遮住了,所名真的是显示出来但是什么也没有

         */
     /*   Bitmap bitmapCopy = Bitmap.createBitmap(srcbitmap.getWidth(), srcbitmap.getHeight(), srcbitmap.getConfig());
        //2.创建画笔
        Paint paint = new Paint();
        //3创建画板来画画,把白纸放上
        Canvas canvas = new Canvas(bitmapCopy);
        //4开始画画把原图放在画板上, 相当于模特
        Matrix mt = new Matrix();
            //平移
//        mt.setTranslate(20,140);

        canvas.drawBitmap(srcbitmap, mt, paint);*/
        //代码在哪行写还是很重要的,要有逻辑
//        canvas.drawLine(10,10,140,140,paint);不出现黑线呢???

        //加载图片 Bitmap和decodeFile
        Bitmap bmCopy = Bitmap.createBitmap(bmSrc.getWidth(), bmSrc.getHeight(), bmSrc.getConfig());

        //2.创建画笔对象
        Paint paint = new Paint();

        //3.创建画板对象,把白纸铺在画板上
        Canvas canvas = new Canvas(bmCopy);

        //4.开始作画,把原图的内容绘制在白纸上
        Matrix mt = new Matrix();

        //平移
        mt.setTranslate(20, 240);
        //第一个参数扩大缩放,第二参数缩放,所谓
        mt.setScale(2,1);
        //sx:水平方向的缩放比例
        //sy:竖直方向的缩放比例 :1是不变
//        mt.setScale(0.5f, 0.5f);
//        mt.setScale(0.5f, 0.5f, bmCopy.getWidth() / 2, bmCopy.getHeight() / 2);
        //旋转
//    mt.setRotate(45, bmCopy.getWidth() / 2, bmCopy.getHeight() / 2);

        //镜面,就是水平翻转、看水里左拿剑在水里就是右手
        mt.setScale(-1,1);//宽的坐标都乘以负-1
        mt.postTranslate(bmCopy.getWidth(),0);//平移一个图片的宽度距离
//        mt.setScale(-1, 1);
//        mt.postTranslate(bmCopy.getWidth(), 0);
        //倒影
      mt.setScale(1, -1);
       mt.postTranslate(0, bmCopy.getHeight());
        canvas.drawBitmap(bmSrc, mt, paint);

        ImageView mivone = (ImageView) findViewById(R.id.iv_one);
        ImageView mivtwo = (ImageView) findViewById(R.id.iv_two);
        mivone.setImageBitmap(bmSrc);
        mivtwo.setImageBitmap(bmCopy);

    }
}

  /*  public void onClick2(View v) {

        *//**
 * 如果想改图片,需要在内存中生成一个副本也就一个拷贝,然后我们改拷贝,再把拷贝给显示出来
 * 我想给他加一个水印,其实我们看到已经不是原图,一个拷贝的图;原图是只读我们加载出来就扔了,
 * 这个原图是只读的,无法改
 * <p/>
 * 创建图片 副本
 * 1,在内存中创建一个与原图一模一样的大小的bitmap对象,所以Config用原图的就行
 * 一般看返回值要看对象.方法()看方法的返回值是什么,这句返回值就是什么;
 * <p/>
 * <p/>
 * bitmapCopy现在只是和srcbimap宽高一样但是它没有内容的,但是他是可读可写的,
 * 真的btn一点什么也不显示,但是btn被图片给遮住了,所名真的是显示出来但是什么也没有
 *//*
        Bitmap srcbitmap = BitmapFactory.decodeFile("sdcard/dog.jpg");
        *//**
 *创建图片 副本
 * 1,在内存中创建一个与原图一模一样的大小的bitmap对象,所以Config用原图的就行
 * 一般看返回值要看对象.方法()看方法的返回值是什么,这句返回值就是什么;
 *//*

        *//**
 *
 bitmapCopy现在只是和srcbimap宽高一样但是它没有内容的,但是他是可读可写的,
 真的btn一点什么也不显示,但是btn被图片给遮住了,所名真的是显示出来但是什么也没有

 *//*
        Bitmap bitmapCopy = Bitmap.createBitmap(srcbitmap.getWidth(), srcbitmap.getHeight(), srcbitmap.getConfig());
            //2.创建画笔
        Paint paint=new Paint();
            //创建画板来画画,把白纸放上
        Canvas canvas=new Canvas(bitmapCopy);
            //开始画画把原图放在画板上, 相当于模特
        canvas.drawBitmap(srcbitmap,new Matrix(),paint);



        //加载图片 Bitmap和decodeFile
        ImageView mivone = (ImageView) findViewById(R.id.iv_one);
        ImageView mivtwo = (ImageView) findViewById(R.id.iv_two);
        mivone.setImageBitmap(bitmapCopy);
        mivtwo.setImageBitmap(srcbitmap);




    }

}*/
************************************


package com.lyz.news.day32madia;


import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    }

    /**
     * 视频用的虚拟机 内存比较小所以需要,缩放
     * 而我们现在的手机基本申请的虚拟内存很大了,直接用不会蹦;
     *
     * @param v
     */

    public void onClick(View v) {
        Log.i("MainActivity", "11111111111111111111111111111111111111111111111");

        BitmapFactory.Options options = new BitmapFactory.Options();
        //不为像素申请内存,只获取宽高
        options.inJustDecodeBounds = true;//只解析宽和高
        BitmapFactory.decodeFile("sdcard/haha.jpg", options);
//        拿到宽和高
        int imageWidth = options.outWidth;
        int imageheight = options.outHeight;
        //获取屏幕宽和高
        Display dp = getWindowManager().getDefaultDisplay();

        int width = dp.getWidth();
        int height = dp.getHeight();
        int scale = 1;//默认值是1表示不缩放
        //计算比例
        int scaleWidth = imageWidth / width;//算出水平缩放比例
        int scaleHeight = imageheight / height;
        // 下面这个括号要我穿一个Point,所以我们就传一个new Point()
        if (scale >= scaleHeight && scale >= 1) {//如果小于1就是用缩放,已经很小了
            scale = scaleHeight;
        } else if (scale >= scaleWidth && scale >= 1) {
            scale = scaleWidth;
        }
//        设置缩放比例大小设置进去
        options.inSampleSize = scale;
//        加载图片开始
        options.inJustDecodeBounds = false;//
        //加载图片 Bitmap和decodeFile,这个bitmap现在是不能更改的,无法加特效,只能显示

        //返回一个更小的图片的来节省内存
//        dp.getSize(new Point());没正Point
        //加载图片 Bitmap和decodeFile
        /**
         * 如果想改图片,需要在内存中生成一个副本也就一个拷贝,然后我们改拷贝,再把拷贝给显示出来
         * 我想给他加一个水印,其实我们看到已经不是原图,一个拷贝的图;原图是只读我们加载出来就扔了,
         * 把参数给options再塞入到doceFile
         */
        Bitmap bitmap = BitmapFactory.decodeFile("sdcard/haha.jpg", options);
        ImageView miv = (ImageView) findViewById(R.id.iv_tp);
//        在视图中显示我们的处理后的图片
        miv.setImageBitmap(bitmap);

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值