您的位置:首页 > 移动开发 > Android开发

android 画画

2015-09-22 00:11 435 查看
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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: