一:Android图片操作

1.存储bitmap到本地文件系统

public static void bitmapToFile(Bitmap bitmap, String uri) {if(!externalStorageAvailable()) {return;}if (bitmap == null) {return;}// 先检查目录是否存在,不存在的话,创建目录File wikiDir = new File(WIKI_IMAGE_DIR);if (!wikiDir.exists()) {wikiDir.mkdirs();  }File f = new File(IMAGE_DIR, uri);if (f.exists()) {return;}try {FileOutputStream out = new FileOutputStream(f);bitmap.compress(Bitmap.CompressFormat.JPEG, IMG_CACHE_QUALITY, out);out.flush();out.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}

2.读取图片为bitmap

public static Bitmap fileToBitmap(String uri) {File imgFile = new File(IMAGE_DIR + File.separator + uri);if(imgFile.exists()) {Bitmap bitmap = BitmapFactory.decodeFile(IMAGE_DIR + File.separator + uri);  return bitmap;}return null;
}

二、Android 屏幕相关

结论:绝大部分机型的屏幕宽度是320dp和360dp。

在android中为了适应不同分辨率的屏幕,引入了密度无关像素density-independent pixes,也就是dip,也可以简写为dp。之所以是与密度无关,是因为android为不同的密度提供了不同的scale值,比如mdpi的值为1,hdpi为1.5,xhdpi为2.这样,如果使用相同的dp值,系统在转换为px时,会使用dp*scale值,这样得到的比例大家都相同,而比例相同了,也就意味着屏幕适配了。如480*800,4.0inch的屏幕,为hdpi。屏幕的一半可以用160dp表示,其px = 160 * 1.5 = 240px,恰好为480的一半。而320*640的 3.5inch的屏幕,为mdpi。屏幕的一半也是160dp,其px = 160 * 1 = 160px,恰好为320的一半。这样dp就实现了不同屏幕的适配。
 
但是现在xhdpi的屏幕也很普遍,比如720*1280 4.5inch的屏幕,其scale值为2,所以整个屏幕为360dp,这样与hdpi和mdpi就不太相同了,用dp表示比例就有些误差了。不过这种误差也是在可以接受的范围之内。
 
上面所说的都是以屏幕宽度为基准,因为ui设计时也是尽量已宽度为基准,如果以高度为基准,dp值表示的比例就相差更大了。
 
而对于平板很多情况下以高度作为标准。都是hdpi的平板其宽高就更不一样了。比如高度分别是1200和1600的平板,都是hdpi。这就意味着如果是表示一半的高度,dp值分别为400dp和533,相差如此之大,所以用dp来布局显然不再适用。
 
解决方法:
既然dp的引入其实就是为了用同一个dp值表示相同的比例,那么我们其实可以直接用比例表示(dp的本质也是比例,只不过scale的划分无法面面俱到)。当然前提是不同的屏幕比例不能相差过大,比如横屏和竖屏就无法通用,需要写两个layout
 
例如ui给一张设计图,尺寸为2560 * 1920,其长宽比为4:3. 所有的标注均以该尺寸为准。这样为了能够通用这些标注,不必手动计算,可以定义如下个方法
private int px_x(float px) {//以宽度为基准计算x方向上的比例return (int)(px / 2560 * mScreenHight);
}private int px_y(float px) {return (int)(px / 1920* mScreenWidth);
}

这样在代码中重新设置一下跟尺寸相关的属性即可以保证相关内容可以适配到不同尺寸的屏幕上。
 
需要注意的是:
这样写的一个缺点就是无法再xml里的layout中直接定义好布局。尤其是各个控件之间的距离。不过xml并非没有用处,可以通过xml很方便的定义控件直接的相对位置,比如above,below等属性,这样在代码中就不必重复定义了。可以通过 view.getLayoutParameters()方法获取到布局属性,然后覆盖与尺寸相关的内容即可。(注:不可以用new parameter()的方法,这样会完全覆盖xml中的设置)

三、Android  .9 图片的理解及用途

1..9.png如何理解?
.9.png仍然是一个png格式的图片,只不过是针对Android平台的可以指定图片特定位置拉伸和填充内容的一种特殊的png图片格式。
 
这里需要注意几个问题:
a..9.png只是针对Android平台而言的,在其他平台上没有效果;
b..9.png只是针对图片拉伸而言的,当然包括单独的横线拉伸,单独的纵向拉伸和同时横向和纵向拉伸,对于图片压缩没有效果;
c..9.png可以同时指定图片的横向和纵向拉伸的区域(相应的可以理解成可以指定图片不进行拉升的区域),由此可以在图片拉伸时达到自己想要的效果;
d..9.png可以指定图片上填充内容(包括文字和非文字的布局等)的区域,非填充区域即可理解成div中的padding留白。
 
2..9.png拉伸和填充区域如何指定?
这方面网上资料太多,主要都谈到在.png图片四周增加左、上、右、下四条带有一个像素的黑实线,分别表示含义如下:
左边线条:当图片进行纵向拉伸时,由此线条从图片左边水平位移到图片右边所形成的区域都是可以进行纵向拉伸的,此区域外则不进行拉伸,保留原来效果;
上边线条:当图片进行水平拉伸时,由此线条从图片上边垂直位移到图片下边所形成的区域都是可以进行横向拉伸的,此区域外则不进行拉伸,保留原来效果;
右边线条:控制图片填充内容的垂直padding留白;
下边线条:控制图片填充内容的水平padding留白。
 
3..9.png如何制作?
 
网上也介绍了不少关于.9.png的图片制作工具,推荐Google官方推荐的工具draw9patch。位于目录\adt-bundle\sdk\tools\下。双击即可打开,既可以通过.png图片制作成.9.png,也可直接对现有.9.png图片进行修改,使用非常方便。

Android 图片文件操作、屏幕相关、.9图片的理解相关推荐

  1. python对文件的操作都有什么_python中文件操作的相关内容总结(附示例)

    本篇文章给大家带来的内容是关于python中文件操作的相关内容总结(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1. 文件操作介绍 说到操作文件我们肯定会想到流,文件的操 ...

  2. vue删除图片同时删除本地文件_删除图片数据时同时删除图片文件夹里面的相应图片文件的方法...

    作者:Mr.XQIJIANG 本文版权归[Mr.XQIJIANG]所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利. /// /// 删除图 ...

  3. linux隐写文件剥离,杂项的基本解题思路(1)——文件操作隐写、图片隐写

    文件操作隐写 图片隐写 压缩文件处理 流量取证技术 文章本来是分成4部分的,但是前两部分何在一起写了也就没有分开,所以干脆就只分了两部分 文件基本类型的识别 一.kail 下 file 文件名 原理就 ...

  4. 图片文件太大?缩小图片文件的2个小技巧

    日常生活中,经常会碰到图片文件太大,不满足自身需求的情况,比如在网站上传图片的时候一般都会有大小限制.面对这个问题,该怎么办呢? 一般处理的方式有两种,一种是使用图片压缩工具,来对图片进行压缩. 现在 ...

  5. 微信小程序之一本地图片处理--按屏幕尺寸插入图片

    个人感觉微信小程序的IDE用起来有时候不太方便,可能是之前用惯了Eclipse的原因吧.微信小程序的开发工具不支持直接将文件拷贝到目录下,所以首先要将图片文件导入到本地目录下,然后编写工具类获取屏幕的 ...

  6. 微信小程序本地图片处理--按屏幕尺寸插入图片

    个人感觉微信小程序的IDE用起来有时候不太方便,可能是之前用惯了Eclipse的原因吧.微信小程序的开发工具不支持直接将文件拷贝到目录下,所以首先要将图片文件导入到本地目录下,然后编写工具类获取屏幕的 ...

  7. android的文件操作,Android文件操作概要1.ppt

    Android文件操作概要1 Linux文件系统 在Linux中,文件的扩展名并不重要,一个文件是否可以访问或执行,是完全由文件属性来决定的.细心的读者会发现最后一列比较特殊,这一列描述的是Linux ...

  8. python读取raw图片文件_python读取raw binary图片并提取统计信息的实例

    python读取raw binary图片并提取统计信息的实例 发布时间:2020-09-08 23:22:52 来源:脚本之家 阅读:66 用python语言读取二进制图片文件,并提取非零数据统计信息 ...

  9. C#实现图片文件到数据流再到图片文件的转换

    //----引入必要的命名空间 using System.IO; using System.Drawing.Imaging; //----代码部分----// private byte[] photo ...

最新文章

  1. Linux下第一个java程序没有成功
  2. tomcat更改端口
  3. m5310模组数据上传至onenet_NBIOT模组M5310接入中国移动物联网开放平台示例文档
  4. 组态王6.55连接MySql数据库(笔记)
  5. 带你玩转css3的3D!
  6. 华为与五粮液签署战略合作协议
  7. C++--第12课 - 操作符重载 - 上
  8. linux指定运行so文件,linux – 强制二进制文件使用特定(较新)版本的共享库(.so)...
  9. java课程设计——租房管理系统
  10. UC3842好坏的判断方法
  11. CentOS7+华为交换机+Winserver2012配置KMS服务器开机自启和自动激活
  12. 如何查看自己的qq邮箱服务器地址,怎么看自己设置的qq邮箱帐号
  13. H3C 40MHz频宽模式
  14. BigDecimal取余运算
  15. QCM2290 充电指示灯 —— CHG_LED_SINK
  16. 上饶的景点和特产推荐
  17. “ 请找出下面重复的字”
  18. 计算组合数的几种方法总结
  19. Java SE核心API(2) —— 正则表达式、Object、包装类
  20. 推荐一个 SpringBoot 2.x + vue 实现的个人支付宝、微信支付系统

热门文章

  1. shell判断文件,目录是否存在或者具有权限 (转载)
  2. HDU 2144 (最长连续公共子列 + 并查集) Evolution
  3. 【jeecg-mybatis版本】 mybatis+spring mvc 完美整合方案 查询,保存,更新,删除自动生成...
  4. Reloading Java Classes 101: Objects, Classes and ClassLoaders Translation
  5. Linux之at命令
  6. 随机字符串,随机密码生成器
  7. linux 读写权限
  8. Solr管理索引库——(十三)
  9. Android-webview加载网页去除标题
  10. SAP R3 display Vendor list, MKVZ .