持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情,希望大家多多支持,帮忙点个赞,谢谢!
前言
前文我们讲述了选择图片的弹窗如何去写,本节我们就探讨一下关于图片的一些知识,从而对后面完成图片分析做准备。
正篇
图片参数
手机拍完照未处理的图片一般包含许多信息,而我们通常使用ExifInterface类去获取这些参数:
//读取图片EXIF信息
try {
//new ExifInterface(图片路径);
ExifInterface exifInterface = new ExifInterface(file.toString());
String Orientation = exifInterface.getAttribute(ExifInterface.TAG_ORIENTATION);//方向
String DateTime = exifInterface.getAttribute(ExifInterface.TAG_DATETIME);//时间日期
String Make = exifInterface.getAttribute(ExifInterface.TAG_MAKE);//设备制造商
String Model = exifInterface.getAttribute(ExifInterface.TAG_MODEL);//设备型号
String Flash = exifInterface.getAttribute(ExifInterface.TAG_FLASH);//闪光灯
String ImageWidth = exifInterface.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);//图片宽
String ImageLength = exifInterface.getAttribute(ExifInterface.TAG_IMAGE_LENGTH);//图片长
String ExposureTime = exifInterface.getAttribute(ExifInterface.TAG_EXPOSURE_TIME);//曝光时间
String FNumber = exifInterface.getAttribute(ExifInterface.TAG_APERTURE);//光圈值
String ISOSpeedRatings = exifInterface.getAttribute(ExifInterface.TAG_ISO);
String GPSLatitude = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE);//纬度
String GPSLongitude = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);//经度
String GPSLatitudeRef = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF);//纬度参考
String GPSLongitudeRef = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);//经度参考
} catch (IOException e) {
e.printStackTrace();
}
常用的有图片旋转角度用于适配一些特殊机型(三星s9等拍照后图片会旋转90度,需要处理),图片地理位置,以及时间日期等。
图片分辨率
图片分辨率也是非常重要的,我们安卓一般使用dp去做单位,但因为一像素一般是1px,所以我们要进行单位转换,这里附上转换的方法:
//dp -> px
public static int dip2px(Context mContext, float dp) {
float scale = mContext.getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
//px -> dp
public static int px2dip(Context mContext, float px) {
float scale = mContext.getResources().getDisplayMetrics().density;
return (int) (px / scale + 0.5f);
}
坐标系
坐标系是一个初见让人心烦,学会十分好用的东西,这里先不展开坐标系的知识,我们说一下关于安卓中触摸方法的坐标系获取,因为触摸需要重写onTouch方法,而在onTouch方法中包含有一个MotionEvent,它提供了对于触摸点的位置描述:
event.x // 触摸点相对于View的X坐标位置
event.y // 触摸点相对于View的Y坐标位置
event.rawX // 触摸点相对于屏幕最左侧的距离
event.rawY // 触摸点相对于屏幕最上侧的距离
通过计算坐标位置和想要的效果对应的坐标变换就能非常准确的让图片变成你想要的效果,而这个触摸方法也是能方便控制图片的位置移动与缩放等等。
小结
本节讲述了图片的一些知识与开发应用方式,为下一节的图片控制做准备,也对图片的适配有较大的帮助,也是我们对图像操作的第一步。