最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

android bitmap显示图片,Android

运维笔记admin83浏览0评论

android bitmap显示图片,Android

android bitmap显示图片,Android

一:计算机表示图形的几种方式

二:Android加载大图片

原理:

[1]获取手机分辨率

[2]获取图片分辨率

创建位图工厂的配置参数

获取图片宽高

[3]计算缩放比例

[4]显示缩放后的图片

示例代码:

@SuppressLint("SdCardPath")

public class MainActivity extends Activity {

private int height;

private int width;

@SuppressWarnings("deprecation")

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//[1]获取手机分辨率

WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

width = wm.getDefaultDisplay().getWidth();

height = wm.getDefaultDisplay().getHeight();

System.out.println("height:"+height+" width:"+width);

//[2]获取图片分辨率

//创建位图工厂的配置参数

Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;

BitmapFactory.decodeFile("/mnt/sdcard/dx.jpg", options);

//获取图片宽高

int outWidth = options.outWidth;

int outHeight = options.outHeight;

System.out.println(outHeight+" "+outWidth);

//[3]计算缩放比例

int scale = 1;

int scaleX = outWidth / width;

int scaleY = outHeight / height;

if (scaleX > scaleY) {

scale = scaleX;

} else if (scaleX < scaleY) {

scale = scaleY;

}

//[4]显示缩放后的图片

options.inSampleSize = scale;

options.inJustDecodeBounds = false;

Bitmap bm = BitmapFactory.decodeFile("/mnt/sdcard/dx.jpg", options);

ImageView iv_bigpic = (ImageView) findViewById(R.id.iv_bigpic);

iv_bigpic.setImageBitmap(bm);

// ImageView iv_bigpic = (ImageView) findViewById(R.id.iv_bigpic);

// Bitmap bm = BitmapFactory.decodeFile("/mnt/sdcard/dx.jpg");

// //08-21 11:42:14.065: E/AndroidRuntime(2766): java.lang.OutOfMemoryError

// //08-21 11:42:13.895: I/dalvikvm-heap(2766): Forcing collection of SoftReferences for 30720012-byte allocation

//

// iv_bigpic.setImageBitmap(bm);

}

}

三:创建一个原图的副本来操作图片

原理:

[2.1]创建一个模板 相当于 创建了一个大小和原图一样的 空白的白纸

Bitmap copybiBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());

[2.2]想作画需要一个画笔

Paint paint = new Paint();

[2.3]创建一个画布 把白纸铺到画布上

Canvas canvas = new Canvas(copybiBitmap);

[2.4]开始作画

canvas.drawBitmap(srcBitmap, new Matrix(), paint);

[2.5]操作画出来的小猫图片

copybiBitmap.setPixel(20+i, 30, Color.RED);

示例代码:

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//显示原图

ImageView iv_src = (ImageView) findViewById(R.id.iv_src);

//显示副本

ImageView iv_copy = (ImageView) findViewById(R.id.iv_copy);

//[1]先把tomcat.png 图片转换成bitmap 显示到iv_src

Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.tomcat);

//[1.1]操作图片

// srcBitmap.setPixel(20, 30, Color.RED);

iv_src.setImageBitmap(srcBitmap);

//[2]创建原图的副本

//[2.1]创建一个模板 相当于 创建了一个大小和原图一样的 空白的白纸

Bitmap copybiBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());

//[2.2]想作画需要一个画笔

Paint paint = new Paint();

//[2.3]创建一个画布 把白纸铺到画布上

Canvas canvas = new Canvas(copybiBitmap);

//[2.4]开始作画

canvas.drawBitmap(srcBitmap, new Matrix(), paint);

//[2.5]操作画出来的小猫图片

for (int i = 0; i < 20; i++) {

copybiBitmap.setPixel(20+i, 30, Color.RED);

}

//[3]把copybimap显示到iv_copy上

iv_copy.setImageBitmap(copybiBitmap);

}

}

程序运行结果:

四:图形处理的API

原理:

canvas.drawBitmap(srcBitmap,matrix , paint);

matrix的方法,操作图片

旋转

matrix.setRotate(20, srcBitmap.getWidth()/2, srcBitmap.getHeight()/2);

缩放

matrix.setScale(0.5f, 0.5f);

平移

matrix.setTranslate(30, 0);

镜面效果

// matrix.setScale(-1.0f, 1);

//post是在上一次修改的基础上进行再次修改 set 每次操作都是最新的 会覆盖上次的操作

// matrix.postTranslate(srcBitmap.getWidth(), 0);

倒影效果

//[2,7]倒影效果

matrix.setScale(1.0f, -1);

//post是在上一次修改的基础上进行再次修改 set 每次操作都是最新的 会覆盖上次的操作

matrix.postTranslate(0, srcBitmap.getHeight());

示例代码:

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//显示原图

ImageView iv_src = (ImageView) findViewById(R.id.iv_src);

//显示副本

ImageView iv_copy = (ImageView) findViewById(R.id.iv_copy);

//[1]先把tomcat.png 图片转换成bitmap 显示到iv_src

Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.tomcat);

//[1.1]操作图片

// srcBitmap.setPixel(20, 30, Color.RED);

iv_src.setImageBitmap(srcBitmap);

//[2]创建原图的副本

//[2.1]创建一个模板 相当于 创建了一个大小和原图一样的 空白的白纸

Bitmap copybiBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());

//[2.2]想作画需要一个画笔

Paint paint = new Paint();

//[2.3]创建一个画布 把白纸铺到画布上

Canvas canvas = new Canvas(copybiBitmap);

//[2.4]开始作画

Matrix matrix = new Matrix();

//[2.5]对图片进行旋转

//matrix.setRotate(20, srcBitmap.getWidth()/2, srcBitmap.getHeight()/2);

//[2.5]对图片进行

// matrix.setScale(0.5f, 0.5f);

//[2.6]对图片进行平移

// matrix.setTranslate(30, 0);

//[2.7]镜面效果 如果2个方法一起用

// matrix.setScale(-1.0f, 1);

//post是在上一次修改的基础上进行再次修改 set 每次操作都是最新的 会覆盖上次的操作

// matrix.postTranslate(srcBitmap.getWidth(), 0);

//[2,7]倒影效果

matrix.setScale(1.0f, -1);

//post是在上一次修改的基础上进行再次修改 set 每次操作都是最新的 会覆盖上次的操作

matrix.postTranslate(0, srcBitmap.getHeight());

canvas.drawBitmap(srcBitmap,matrix , paint);

//[3]把copybimap显示到iv_copy上

iv_copy.setImageBitmap(copybiBitmap);

}

}

程序运行效果:

发布评论

评论列表(0)

  1. 暂无评论