利用MediaStore检索图像+利用ExitInterface修改EXIF信息
【摘要】
利用MediaStore检索图像
由于ContentProvider(当前为MediaStore)在应用程序之间是共享的,且大多数应用程序默认使用MediaStore,因此可以利用它来建立自己的图像库应用程序。
MediaStore和所有的内容提供器都以一种类似数据库的方式运作。从它们中选择记录,获得一个Cursor对象,并通过它来...
利用MediaStore检索图像
由于ContentProvider(当前为MediaStore)在应用程序之间是共享的,且大多数应用程序默认使用MediaStore,因此可以利用它来建立自己的图像库应用程序。
MediaStore和所有的内容提供器都以一种类似数据库的方式运作。从它们中选择记录,获得一个Cursor对象,并通过它来遍历结果。
1.首先创建一个打算返回列的字符串数组。对于MediaStore中的图像,其标准列在MediaStore.Images.Media类表示。
String[] columns={Media.DATA,Media._ID,Media.TITLE,Media.DISPLAY_NAME};
-
long oneHourAgo=System.currentTimeMillis()/1000-(60*60);
-
String[] whereValues={""+oneHourAgo};
-
cursor=managedQuery(Media.EXTERNAL_CONTENT_URI,columns,Media.DATE_ADDED+" > ?",whereValues,Media.DATE_ADDED+" ASC");
displayColumn=cursor.getColumnIndexOrThrow(Media.DISPLAY_NAME);
-
public class MediaStoreGallery extends Activity
-
{
-
public final static int DISPLAYWIDTH=200;
-
public final static int DISPLAYHEIGHT=200;
-
TextView titleTextView;
-
ImageButton imageButton;
-
Cursor cursor;
-
Bitmap bmp;
-
String imageFilePath;
-
int fileColumn;
-
int titleColumn;
-
int displayColumn;
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState)
-
{
-
// TODO Auto-generated method stub
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
titleTextView=(TextView)this.findViewById(R.id.TitleTextView);
-
imageButton=(ImageButton)this.findViewById(R.id.ImageButton);
-
-
String[] columns={Media.DATA,Media._ID,Media.TITLE,Media.DISPLAY_NAME};
-
cursor=managedQuery(Media.EXTERNAL_CONTENT_URI,columns,null,null,null);
-
-
// long oneHourAgo=System.currentTimeMillis()/1000-(60*60);
-
// String[] whereValues={""+oneHourAgo};
-
// cursor=managedQuery(Media.EXTERNAL_CONTENT_URI,columns,
-
// Media.DATE_ADDED+" > ?",whereValues,Media.DATE_ADDED+" ASC");
-
-
fileColumn=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
-
titleColumn=cursor.getColumnIndexOrThrow(Media.TITLE);//可简写成
-
displayColumn=cursor.getColumnIndexOrThrow(Media.DISPLAY_NAME);
-
-
if(cursor.moveToFirst())
-
{
-
titleTextView.setText(cursor.getString(titleColumn));
-
imageFilePath=cursor.getString(fileColumn);
-
bmp=getBitmap(imageFilePath);
-
imageButton.setImageBitmap(bmp);
-
}
-
-
imageButton.setOnClickListener(new OnClickListener()
-
{
-
-
@Override
-
public void onClick(View v)
-
{
-
// TODO Auto-generated method stub
-
if(cursor.moveToNext())
-
{
-
titleTextView.setText(cursor.getString(titleColumn));
-
imageFilePath=cursor.getString(fileColumn);
-
bmp=getBitmap(imageFilePath);
-
imageButton.setImageBitmap(bmp);
-
}
-
}
-
-
});
-
}
-
-
private Bitmap getBitmap(String imageFilePath)
-
{
-
-
// 加载图像的尺寸而不是图像本身
-
BitmapFactory.Options bmpFactoryOptions=new BitmapFactory.Options();
-
bmpFactoryOptions.inJustDecodeBounds=true;
-
Bitmap bmp=BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions);
-
-
int heightRatio=(int)Math.ceil(bmpFactoryOptions.outHeight/(float)dh);
-
int widthRatio=(int)Math.ceil(bmpFactoryOptions.outWidth/(float)dw);
-
Log.v("HEIGHT RATIO",""+heightRatio);
-
Log.v("WIDTH RATIO",""+widthRatio);
-
-
// 如果两个比率都大于1,那么图像的一条边将大于屏幕
-
if(heightRatio>1&&widthRatio>1)
-
{
-
if(heightRatio>widthRatio)
-
{
-
// 如果高度比率更大,则根据它缩放
-
bmpFactoryOptions.inSampleSize=heightRatio;
-
}
-
else
-
{
-
// 若宽度比率更大,则根据它缩放
-
bmpFactoryOptions.inSampleSize=widthRatio;
-
}
-
}
-
// 对它进行真正的解码
-
bmpFactoryOptions.inJustDecodeBounds=false;
-
bmp=BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions);
-
return bmp;
-
}
-
}
利用ExitInterface修改EXIF信息
1.EXIF 表示可交换的图像文件格式,它是在图像文件中保存元数据的一种标准方式。一般大多数标记与所捕获图像本身的数据相关,如ExposureTime和ShutterSpeedValue。
然而,有一些标记可以考虑填写或修改。
UserComment:由用户生成的备注
ImageDescription:标题
Artist:图像的创建者或接受者
Copyright:图像的版权持有人
Software:用于创建图像的软件
Android为我们提供了一种读写EXIF数据的方法,该方法的主要类是ExifInterface。
示例代码:
-
//如何使用ExifInterface从一个图像文件读取特定的EXIF数据
-
ExifInterface ei=new ExifInterface(imageFilePath);
-
String imageDescription=ei.getAttribute("ImageDescription");
-
if(imageDescription!=null)
-
{
-
Log.v("EXIF",imageDescription);
-
}
-
//如何使用ExifInterface将EXIF数据保存到图像文件中
-
ei.setAttribute("ImageDescription","Something New");
文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。
原文链接:panda1234lee.blog.csdn.net/article/details/8710318
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)