已经是会员了,怎么提出文字首字母
593
2022-05-30
利用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");
Android
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。