package com.loaderman.customviewdemo;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment; import android.view.View;
import android.widget.ImageView;
import android.widget.Toast; import java.io.File; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//测试inJustDecodeBounds属性,获取图片宽高
findViewById(R.id.injust_decode_bounds_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testInJustDecodeBounds();
}
}); //采样率
findViewById(R.id.in_sample_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testInSample();
}
}); // inScaled
findViewById(R.id.in_scaled_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testInScaled();
}
}); //inDensity、inTargetDensity
findViewById(R.id.in_density_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testInDensity();
}
});
//inPreferredConfig
findViewById(R.id.in_preferred_config_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testInPreferredConfig();
}
}); } //测试inJustDecodeBounds属性,获取图片宽高
private void testInJustDecodeBounds() {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher, options);
Toast.makeText(MainActivity.this, "realwidth:" + options.outWidth + " realheight:" + options.outHeight + " mimeType:" + options.outMimeType
, Toast.LENGTH_SHORT).show();
} //测试采样率函数
private void testInSample() {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.scenery, options); ImageView iv = (ImageView) findViewById(R.id.img);
int sampleSize = calSampleSize(options, iv.getWidth(), iv.getHeight());
Toast.makeText(MainActivity.this, "sampleSize" + sampleSize, Toast.LENGTH_SHORT).show(); BitmapFactory.Options options2 = new BitmapFactory.Options();
options2.inSampleSize = sampleSize;
try {
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.scenery, options2);
iv.setImageBitmap(bmp);
} catch (OutOfMemoryError err) {
//TODO OOM
}
} //dstWidth和dstHeight分别为目标ImageView的宽高
public static int calSampleSize(BitmapFactory.Options options, int dstWidth, int dstHeight) {
int rawWidth = options.outWidth;
int rawHeight = options.outHeight;
int inSampleSize = 1;
if (rawWidth > dstWidth || rawHeight > dstHeight) {
float ratioHeight = (float) rawHeight / dstHeight;
float ratioWidth = (float) rawWidth / dstHeight;
inSampleSize = (int) Math.min(ratioWidth, ratioHeight);
}
return inSampleSize;
} //inPreferredConfig
public void testInPreferredConfig() {
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.scenery);
String LogStr = "ARGB888_width:" + bmp.getWidth() + " height:" + bmp.getHeight() + " 内存:" + bmp.getByteCount();
Toast.makeText(MainActivity.this, LogStr, Toast.LENGTH_SHORT).show(); BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;//用来设置像素的存储格式
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.scenery, options);
String LogStr2 = "ARGB565_width:" + bitmap.getWidth() + " height:" + bitmap.getHeight() + " 内存:" + bitmap.getByteCount();
Toast.makeText(MainActivity.this, LogStr2, Toast.LENGTH_SHORT).show();
} public void testInScaled() {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.scenery);
Toast.makeText(MainActivity.this, "drawableBmp_width:" + bitmap.getWidth() + " height:" + bitmap.getHeight() + " 内存:" + bitmap.getByteCount(),
Toast.LENGTH_SHORT).show(); BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;//是否缩放
Bitmap noScaleBmp = BitmapFactory.decodeResource(getResources(), R.drawable.scenery, options);
Toast.makeText(MainActivity.this, "drawableBmp_width:" + noScaleBmp.getWidth() + " height:" + noScaleBmp.getHeight() + " 内存:" + noScaleBmp.getByteCount(), Toast.LENGTH_SHORT).show();
} public void testInDensity() {
//从Drawable里读取
BitmapFactory.Options options = new BitmapFactory.Options();
options.inDensity = 1;//用于设置屏幕分辨率
options.inTargetDensity = 2;//表示真正显示屏幕分辨率
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.scenery, options); //直接从文件中读取
File file = Environment.getExternalStorageDirectory();
String path = file.getAbsolutePath() + "/scenery.png";
Bitmap bmp = BitmapFactory.decodeFile(path, options);
if (bmp == null) {
Toast.makeText(MainActivity.this, "请确保SD卡根目录存在scenery.png", Toast.LENGTH_SHORT).show();
} else {
String toastStr = "fileBmp_width:" + bmp.getWidth() + " height:" + bmp.getHeight() + " 内存:" + bmp.getByteCount(); Toast.makeText(MainActivity.this, toastStr, Toast.LENGTH_SHORT).show();
} }
}

BitmapFactory之Options的更多相关文章

  1. 安卓开发笔记——关于照片墙的实现(完美缓存策略LruCache+DiskLruCache)

    这几天一直研究在安卓开发中图片应该如何处理,在网上翻了好多资料,这里做点小总结,如果朋友们有更好的解决方案,可以留言一起交流下. 内存缓存技术 在我们开发程序中要在界面上加载一张图片是件非常容易的事情 ...

  2. Android图像篇

    Android的渲染分为2D渲染和3D渲染两种,当中2D渲染的引擎为Skia.3D渲染的引擎是OpenGL ES.眼下.Android支持OpenGL ES1.0和OpenGL ES 2.0两种标准. ...

  3. Android中处理大图片时图片压缩

    1.BitmapFactory.Options中的属性 在进行图片压缩时,是通过设置BitmapFactory.Options的一些值来改变图片的属性的,下面我们来看看BitmapFactory.Op ...

  4. Android-认识Bitmap

    Android-认识Bitmap 学习自 Android开发艺术探索 例行废话 在Android的各种APP中都被离不开各种各样的图片,有的图片很大,有的图片很小不管这样图片都是一种很吃内存的资源,而 ...

  5. Android Bitmap 全面解析(一)加载大尺寸图片

    压缩原因:1.imageview大小如果是200*300那么加载个2000*3000的图片到内存中显然是浪费可耻滴行为;2.最重要的是图片过大时直接加载原图会造成OOM异常(out of memory ...

  6. jquery photoClip支持手机端,PC端 本地裁剪图片后上传插件

    支持手机,PC最好的是jquery photoClip插件,下载地址&示例:https://github.com/topoadmin/photoClip demo.html 代码: <! ...

  7. Android学习笔记之BitmapFactory.Options实现图片资源的加载...

    PS:小项目总算是做完了...历经20多天...素材,设计,以及实现全由自己完成...心力憔悴啊...该写写博客记录一下学习到的东西了... 学习内容: 1.使用BitmapFactory.Optio ...

  8. android 下载图片出现SkImageDecoder::Factory returned null,BitmapFactory.Options压缩

    网上有很多说是因为没有采用HttpClient造成的,尼玛,我改成了HttpClient 请求图片之后还是会出现SkImageDecoder::Factory returned null, 但是直接使 ...

  9. 【转】BitmapFactory.Options

    BitmapFactory.Options这个类的信息:http://developer.android.com/reference/android/graphics/BitmapFactory.Op ...

随机推荐

  1. 前端学习笔记--CSS布局--文件流定位

    1.概述 2.文档流定位:从上到下,从左到右 代码: <!DOCTYPE html> <html lang="en"> <head> <m ...

  2. VSCode - Beautify 插件配置

    1. 在工作目录下建立.jsbeautifyrc文件 官方文档 { "brace_style": "none,preserve-inline", "i ...

  3. vue 过滤

  4. JS获取当前年份月

    //获取完整的日期 var date=new Date; var year=date.getFullYear();  var month=date.getMonth()+1; month =(mont ...

  5. Comet OJ - Contest #7

    传送门 \(A\) 咕咕咕 int main(){ for(scanf("%d",&T);T;--T){ scanf("%d%d",&l,&am ...

  6. 对list某个条件排序,并实现分页

    package com.jcloud.aioc.api.controller.Test; import com.alibaba.fastjson.JSON; import org.apache.poi ...

  7. mysql IFNULL函数和COALESCE函数使用技巧

    IFNULL() 函数      IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值. IFNULL() 函数 ...

  8. [CERC2015]Juice Junctions(边双连通+字符串hash)

    做法 考虑边数限制的特殊条件,显然答案仅有\(\{0,1,2,3\}\) 0:不联通 1:连通 2:边双连通 3:任意删掉一条边都为边双连通 考虑每次删边后记录各点的边双染色情况来特判\(3\):是否 ...

  9. windows下java环境变量标准配置

    配置步骤 1.“此电脑”右键,选择“属性”,点击“高级系统设置”,点击“环境变量”. 2.在“系统变量”这一栏,点击“新建”,变量名:JAVA_HOME,变量值:C:\Program Files\Ja ...

  10. JS JQuery 操作: Json转 Excel 下载文件

    方法的调用 var json = '[' + '{"申请流水号":"123456","保险公司":"测试数据",&quo ...