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. 为什么要设置HTTP timeout?

    先看一个不设置timeout造成的线上事故. 一次线上事故 有一次生产上的一个服务出了点故障,一个原本每5分钟执行一次的定时任务突然不执行了.第一反应是任务执行报错,查看日志,却没有找到任何异常报错信 ...

  2. MySQL 空间数据 简单操作

    在做的项目中需要,自己绘制区域图形,并存储起来,后面还有更新的需要,存文件不方面,想到现在数据库都支持空间数据库. 现在用的就是 MySQL ,就继续用 MySQL 来存储.管理空间数据.下面就做一些 ...

  3. 1128 聚合查询 orm字段及属性

    目录 一 聚合查询 1. 级联 级联删除 级联更新 2. 聚合函数 使用 aggregate 使用场景 3. 分组查询 语法 使用 annotate 代码 4. F与Q查询 F查询 Q查询 二 ORM ...

  4. puppeteer报错 UnhandledPromiseRejectionWarning: Error: Protocol error (Page.getLayoutMetrics): Target closed.

    puppeteer运行时报错: UnhandledPromiseRejectionWarning: Error: Protocol error (Page.getLayoutMetrics): Tar ...

  5. 中文日历Calendar

    一.层次结构 Object<-----Calendar<-----EastAsianLunisolarCalendar<-----ChineseLunisolarCalendar(农 ...

  6. 如何在vscode中用standard style 风格去验证 vue文件

    1 JavaScript Standard Style简介 本工具通过以下三种方式为你(及你的团队)节省大量时间: 无须配置. 史上最便捷的统一代码风格的方式,轻松拥有. 自动代码格式化. 只需运行 ...

  7. 47、[源码]-Spring容器创建-初始化MessageSource

    47.[源码]-Spring容器创建-初始化MessageSource 7.initMessageSource();初始化MessageSource组件(做国际化功能:消息绑定,消息解析): 获取Be ...

  8. 005_Python3 运算符

    什么是运算符? 本章节主要说明Python的运算符.举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. Python语言支持以下类型的运算 ...

  9. Vin2008 X64安装.Net Framework1.1

     http://www.iis.net/learn/install/installing-iis-7/how-to-install-aspnet-11-with-iis-on-vista-and- ...

  10. pyexcel_xlsx

    from pyexcel_xlsx import get_data,save_data excel_data = get_data('xxxx.xlsx文件存储位置') #得到的excel_data是 ...