一: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. C#文件操作常用相关类(Directory类、File类、Path类)

    1.文件操作常用相关类 1)File //操作文件,静态类,对文件整体操作.拷贝.删除.剪切等 2)Directory //操作目录(文件夹),静态类 3)DirectoryInfo //文件夹的一个 ...

  2. android的文件操作

    http://blog.csdn.net/fenghome/article/details/5668598 android的文件操作要有权限: <uses-permission android: ...

  3. 如何将位图格式图片文件(.bmp)生成geotiff格式图片?

    一.位图格式信息 位图BITMAPINFOHEADER 与BITMAPFILEHEADER: 先来看BITMAPINFOHEADER,只写几个主要的 biSize包含的是这个结构体的大小(包括颜色表) ...

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

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

  5. android通用文件操作

    最经用到android的SCCard的文件操作,因此稍作了整理,将它写成一个简单的工具类.其中,可以判断SDCard的是否可用,可用存储空间,文件的创建以及写入数据.经过测试,可以正常使用.代码如下: ...

  6. Struts2图片文件上传,判断图片格式和图片大小

    1. 配置Struts2能够上传的最大文件大小 使用Struts2进行文件上传的时候,Struts2默认文件大小最大为2MB,如果要传大一点的文件,就需要修改struts.xml配置文件,重新设置能够 ...

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

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

  8. Android FileUtils 文件操作类

    系统路径 Context.getPackageName(); // 用于获取APP的所在包目录 Context.getPackageCodePath(); //来获得当前应用程序对应的apk文件的路径 ...

  9. python3 文件操作练习 r+ w+ a+ 的理解

    突然来一句:“慨然有经略四方之志” 文件操作三部曲:1.先用open打开 2.再写关闭  3.再回到中间写操作     为啥要刚打开就关闭 那是很容易望,所以先写上... 基本格式 f = open( ...

随机推荐

  1. office中通过宏添加快捷键

    把“Microsoft 公式 3.0”作为一个按钮放在 2013中的快速访问工具栏的方法 在使用office办公软件的过程中,因为有的人还在使用office2003版本,所以在使用高版本的office ...

  2. 使用Glyph Designer创建位图字体

     使用Glyph Designer创建位图字体 转http://book.2cto.com/201210/6610.html   <iOS 5 cocos2d游戏开发实战(第2版)>将引导 ...

  3. Python 10 —— 杂

    Python 10 —— 杂 科学计算 NumPy:数组,数组函数,傅里叶变换 SciPy:依赖于NumPy,提供更多工具,比如绘图 绘图 Matplitlib:依赖于NumPy和Tkinter

  4. 关于 某编译错误: This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.

    每次当八月在VS2013里使用strcat的时候,基本上都会出现这个问题╮(╯▽╰)╭ 原因貌似是因为安全问题(⊙o⊙) 于是,解决方法如下: ①更改预处理定义: (这也是八月最常用的方法了,虽然貌似 ...

  5. 学习django之python中os模块的函数

    os.sep可以取代操作系统特定的路径分隔符.windows下为 “\\” os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'pos ...

  6. 8.4.1 ImageLoader

    ImageLoader 的工作原理(已经不维护了) 在显示图片的时候,它会先在内存中查找:如果没有,就去本地查找:如果还没有,就开一个新的线程去下载这张图片,下载成功会把图片同时缓存到内存和本地. 基 ...

  7. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

  8. iOS Wi-Fi

    查漏补缺集是自己曾经做过相关的功能,但是重做相关功能或者重新看到相关功能的实现,感觉理解上更深刻.这一类的文章集中记录在查漏补缺集. iOS 开发中难免会遇到很多与网络方面的判断,这里做个汇总,大多可 ...

  9. 一个事务复制的bug--更新丢失

    有两种情况会造成更新丢失,第一种是不正确的设置,例如外键或触发器的“Not For Replication” (NFR)属性没有开启.详情请参考http://blogs.msdn.com/b/apgc ...

  10. .NET Core下使用gRpc公开服务(SSL/TLS)

    一.前言 前一阵子关于.NET的各大公众号都发表了关于gRpc的消息,而随之而来的就是一波关于.NET Core下如何使用的教程,但是在这众多的教程中基本都是泛泛而谈,难以实际在实际环境中使用,而该篇 ...