1. 保存写入存储卡的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
2. 视图上显示的图片和保存时所用的图片分开,保存所用为原图,而显示所用图片可以控制解析时的采样率决定大小。标准以显示时的清晰度(越大越清晰)和编辑处理时的速率(越小越快)为准。
3. 图片显示视图要注意适配不同大小的图片
(1) 视图大小是固定的viewWidth,viewHeight
(2) 图片以宽或高最大的一边不大于viewWidth或viewHeight进行缩放
4. 有些图片可能比较大,因此读取到内存的时候要注意outofmemoryerror,这一点可以参考BitmapFactory类相关一文中介绍的方法处理。如果保存时出现这样的问题,那么最终保存下来的图片相比于原图是有一定的采样损失的。这是考虑到内存的一种必要妥协,但出现这种情况时原图一般很大,这样的损失往往视觉上无碍。
5. 一般图片的方向为0,而全景照片是一种特殊类型的方向不为0的图片,为了保证内容的正确性需要进行方向处理,同时编辑有可能有旋转的操作,此时就更需要特殊处理。
6. 图片编辑完成保存时,除了Bitmap源之外,还需要copy原图的Exif文件和写入新的数据库文件,可能有变化的就是方向值,宽高值,尤其方向值结合第5点需要慎重对待。
7. 图片保存写入SD卡,需要判断存储盘是否挂载,是否有足够的存储空间。
8. Bitmap和Canvas函数中有关bitmap的一些操作是对Bitmap复制操作,产生了一个新的对象,这比较耗时,且此时要注意对不再使用的bitmap进行recycle处理和置空。有些操作仍然是对原对象处理,此时要注意所有使用该Bitmap的地方都是操作后的bitmap。
9. 关于bitmap的操作是耗时操作,此时应考虑使用多线程处理,但要注意原线程绘制时Bitmap一定要准备完毕。