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. Bash基础——Shell脚本内部常用环境变量

    $@和$*区别 不加引号的时候没区别 #! /usr/bin/bash function print_args_at { printf "%s\n" $@ echo $@ } fu ...

  2. 第八届蓝桥杯C/C++程序设计本科B组决赛 ——瓷砖样式(填空题)【DP?我的暴力排列搜索】

    标题:磁砖样式 小明家的一面装饰墙原来是 3*10 的小方格. 现在手头有一批刚好能盖住2个小方格的长方形瓷砖. 瓷砖只有两种颜色:黄色和橙色. 小明想知道,对于这么简陋的原料,可以贴出多少种不同的花 ...

  3. [转]神奇的 SQL 之层级 → 为什么 GROUP BY 之后不能直接引用原表中的列

    原文:https://www.cnblogs.com/youzhibing/p/11516154.html 这篇文章,对group by的讲解不错 -------------------------- ...

  4. vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin in your webpack config.

    默认,webpack无法打包.vue文件,需要安装 相关的loader: cnpm i vue-loader vue-template-compiler -D 提示以下错误信息: Module Err ...

  5. main方法中参数"String[ ] args"详解

    1.在编写完一个有主方法的java文件时,需要在cmd窗口中先编译此java文件(javac xxx.java),然后再运行(java xxx) 其实在运行java xxx的时候如果后面跟着参数用空格 ...

  6. 题解 [51nod1225]余数之和

    题解 [51nod1225]余数之和 题面 解析 首先可以发现,\(a\)%\(b\)\(=a-b*\lfloor a/b \rfloor\). 而对于一段连续的\(b\)来说\(\lfloor a/ ...

  7. git查看commit提交记录详情

    相关的命令: git log:查看所有的commit提交记录: git show: 查看提交的详情: 首先,需要通过git log打印所有commit记录,例如: 1.查看最新的commit:git ...

  8. DOM事件监听和触发

    EventTargetAPI定义了DOM事件(mouse事件等)的监听和触发方法,所有的DOM节点都部署了这个接口. 这个接口有三个方法:addEventListener, removeEventLi ...

  9. sql server 很好的基础练习 <学生表-老师表-课程表-选课表>

    表结构 --学生表tblStudent(编号StuId.姓名StuName.年龄StuAge.性别StuSex) --课程表tblCourse(课程编号CourseId.课程名称CourseName. ...

  10. springboot使用rabbitmq-Topic模式,亲自实测能用!!!

    0.项目目录截图 ===================================================================== springboot的版本: <gr ...