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. SUSE Ceph RBD Mirror - Storage 6

    Ceph采用的是强一致性同步模型,所有副本都必须完成写操作才算一次写入成功,这就导致不能很好地支持跨域部署,因为如果副本在异地,网络延迟就会很大,拖垮整个集群的写性能.因此,Ceph集群很少有跨域部署 ...

  2. Alpha版本发布

                Alpha版本发布   Part1.基本介绍 作业所属课程 课程链接 作业要求 要求链接 团队名称 Typhoon 作业目标 通过本次团队项目,体验通过使用软件工程来研发项目的 ...

  3. C++中priority_queue的用法

    本来想自己写一写的,但看到这个随笔,感觉要写的东西跟这个差不多,就直接附上链接. 需要注意事项: rand()函数需要引入头文件#include<cstdlib>. 自定义类型,重载ope ...

  4. Notepad++ 连接远程 NppFTP

    远程连接 1.自动安装: 插件——> Plugin Manager——>ShowPlugin Manager——>勾选NppFTP插件——>Install ​ 2. 手动安装 ...

  5. Pytohn笔记(31)----第三方包

    摘自: https://www.jianshu.com/p/bbc8672a2d09 一. from __future__ import **** [版本更新之后想在原来的版本使用新版本的一些功能] ...

  6. Idea中用来遍历list集合的快捷键

    使用Intellij idea时,想要快捷生成for循环代码块: itar 生成array for代码块 for (int i = 0; i < array.length; i++) { = a ...

  7. [cf920G][容斥原理+二分]

    https://codeforc.es/contest/920/problem/G G. List Of Integers time limit per test 5 seconds memory l ...

  8. Java处理小数点后几位

    //方式一: //四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); , BigDecimal.ROUND_HALF_UP). ...

  9. Oracle 10g和11g中的自动统计任务

    1)  先来看下oracle 10g中的自动统计任务的问题. 从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动 ...

  10. 工作流学习之--PHP工作流插件

    一.支持的PHP的工作流插件有: 1. TPFlow(thinkphp work flow):是一款开源的ThinkPHP工作流插件,用来解决OA.ERP.CRM.CMS等等办公软件的审核审批的问题. ...