资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

android读取图片,android获取图片uri

android编程:读取指定文件夹下所有png图片

1、程序,把Assets中的图像显示出来

“只有客户发展了,才有我们的生存与发展!”这是成都创新互联公司的服务宗旨!把网站当作互联网产品,产品思维更注重全局思维、需求分析和迭代思维,在网站建设中就是为了建设一个不仅审美在线,而且实用性极高的网站。创新互联对成都网站建设、网站制作、网站制作、网站开发、网页设计、网站优化、网络推广、探索永无止境。

try {

BufferedInputStream bis = new BufferedInputStream(getAssets()

.open("a.bmp"));

Bitmap bm = BitmapFactory.decodeStream(bis);

imageView01.setImageBitmap(bm);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("==========file not found======");

}

2、原理:Android中的资源分析

资源是Android应用程序中重要的组成部分。在应用程序中经常会使用字符串、菜单、图像、声音、视频等内容,都可以称之为资源。通过将资源放到与apk文件中与Android应用程序一同发布,在资源文件比较大的情况下,可以通过将资源作为外部文件来使用,我们将分析如何在Android应用程序中存储这些资源。

一、资源的存储

在android中,资源大多都是保存在res目录中,例如布局资源以XML文件的形式保存在res\layout目录中;图像资源保存着res\drawable目录中;菜单资源保存在res\menu目录中。ADT在生成apk文件时,这些目录中的资源都会被编译,然后保存到apk文件中。如果将资源文件放到res\raw目录中,资源将在不编译的情况下放入apk文件中。在程序运行时可以使用InputStream来读取res\raw目录中的资源。

如果使用的资源文件过大,我们可以考虑将资源文件作为外部文件单独发布。Android应用程序会从手机内存或者SD卡读取这些资源文件。

二、资源的种类

从资源文件的类型来划分,我们可以将资源文件划分为XML、图像和其它。以XML文件形式存储的资源可以放在res目录中的不同子目录里,用来表示不同种类的资源;而图像资源会放在res\drawable目录中。除此之外,可以将任意的资源嵌入Androidy应用程序中。比如音频和视频等,一般这些资源放在res\raw目录中。

表1、 Android支持的资源

目录 资源类型 描述

Res\values

XML

保存字符串、颜色、尺寸、类型、主题等资源,可以是任意文件名。对于字符串、颜色、尺寸等信息采用

Key-value形式表示,对于类型、主题等资源,采用其它形式表示

Res\layout

XML

保存布局信息。一个资源文件表示一个View或ViewGroup的布局

Res\menu

XML

保存菜单资源。一个资源文件表示一个菜单(包括子菜单)

Res\anim

XML

保存与动画相关的信息。可以定义帧(frame)动画和补间(tween)动画

Res\xml

XML

在该目录的文件可以是任意类型的XML文件,这些XML文件可以在运行时被读取。

Res\raw

任意类型

在该目录中的文件虽然也会被封装在apk文件中,但不会被编译。在该目录中可以放置任意类型的文件,例如,各种类型的文档、音频、视频文件等

Res\drawable

图像

该目录中的文件可以是多种格式的图像文件,例如,bmp、png、gif、jpg等。在该目录中的图像不需要分辨率非常高,aapt工具会优化这个目录中的图像文件。如果想按字流读取该目录下的图像文件,需要将图像文件放在res\raw目录中。

assets

任意类型

该目录中的资源与res\raw中的资源一样,也不会被编译。但不同的是该目录中的资源文件都不会生出资源ID

三、资源文件的命名

每一个资源文件或资源文件中的key-value对都会在ADT自动生成的R类(在R.java文件中)中找到相对应的ID.其中资源文件名或key-value对中的key就是R类中的java变量名。因此,资源文件名好key的命名首先要符合java变量的命名规则。

除了资源文件和key本身的命名要遵循相应的规则外,多个资源文件和key也要遵循唯一的原则。也就是说,同类资源的文件名或key不能重复。例如,两个表示字符串资源的key不能重复,就算这两个key在不同的XML文件中也不行。

由于ADT在生成ID时并不考虑资源文件的扩展名,因此,在res\drawable、res\raw等目录中不能存在文件名相同,扩展名不同的资源文件。例如在res\drawable目录不能同时放置icon.jpg和icon.png文件。

四、资源使用示例

在Android SDK中不仅提供了大量的系统资源,而且还允许开发人员定制自己的资源。不管是系统资源,还是自定义的资源,一般都会将这些资源放在res目录中,然后通过R类中的相应ID来引用这些资源。接下来将针对于XML类资源的使用进行分析。

XML资源实际上就是XML格式的文本文件,这些文件必须放在res\xml目录中。可以通过Resources.getXml方法获得处理指定XML文件的XmlResourceParser对象。实际上,XmlResourceParser对象处理XML文件的的过程主要是针对不同的状态点处理相应的代码,比如开始分析文档、开始分析标签、分析标签完成等,XmlResourceParser通过调用next方法不断更新当前的状态。

下面的代码,则是展示如何读取res\xml目录中的XML文件的内容,先在res\xml目录中建立一个xml文件。将AndroidManifest.xml文件复制到res\xml目录中,并改名为android.xml。

在准备完XML文件后,在onCreate方法中开始读取XML文件的内容,代码如下:

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

TextView textView=(TextView)findViewById(R.id.textview);

StringBuffer sb=new StringBuffer();

// 获得处理android。xml文件的XmlResourceParser对象

XmlResourceParser xml=getResources().getXml(R.xml.android);

try

{

//切换到下一个状态,并获得当前状态的类型

int eventType =xml.next();

while(true)

{

//文档开始状态

if(eventType == XmlPullParser.START_DOCUMENT)

{

Log.d("start_document","start_document");

}

//标签开始状态

else if(eventType ==XmlPullParser.START_TAG)

{

Log.d("start_tag",xml.getName());

//将标签名称和当前标签的深度(根节点的depth是1,第2层节点的depth是2,类推)

sb.append(xml.getName()+"(depth:"+xml.getDepth()" ");

//获得当前标签的属性个数

int count=xml.getAttributeCount();

//将所有属性的名称和属性值添加到StringBuffer对象中

for(int i=0;icount;i++)

{

sb.append(xml.getAttributeName(i)+":

"+xml.getAttributeValue(i)+"");

}

sb.append(")\n");

}

//标签结束状态

else if(eventType ==XmlPullParser.END_TAG)

{

Log.d("end_tag",xml.getName());

}

//读取标签内容状态

else if(eventType ==XmlPullParser.TEXT)

{

Log.d("text","text");

}

//文档结束状态

else if(eventType ==XmlPullParser.END_DOCUMENT)

{

Log.d("end_document","end_document");

//文档分析结束后,退出while循环

break;

}

//切换到下一个状态,并获得当前状态的类型

eventType =xml.next();

}

textView.setText(sb.toString());

}

catch(Exception e) {}

}

二、如果想读入文件

在使用getAssets().open("anhui.xml")返回输人流之后,就可以以此为参数,后面的处理跟普通的java的处理相同。

android 如何读取数据库中的图片

从数据库读取二进制文件

然后从二进制读取的图片信息:

byte[] picData = cursor.getBlob(cursor.getColumnIndex("pic_data"));

bitmap.setImageBitmap(BitmapFactory.decodeByteArray(picData, 0, picData.length));

Android 使用系统相机拍照和读取相册照片

1.拍照 (对于7.0以上的版本,不在允许直接访问uri)

`

若不指定输出路径intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri(srcActivity)); 在onActivityResult()中,通过

`

可以拿到uri,但获得的图片是被压缩过的。若指定intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);输出路径,则此处的intent为null,但可以使用我们存的uri读取照片,此时的照片没有被压缩。

2.从相册中读取照片, 方法:

`

`

即使设置 intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri(srcActivity));输出路径,仍然不能从此路径中读取,只能在onActivityForResult()中通过event.uri = intent.getData();方式获得图片uri。

此种现象也好理解,拍照时产生新的图片,自然可根据设置的uri进行图片保存,而读取相册时,图片已经在目录中不能转移到自己设定的uri中。

Androidmanifest.xml中

`

在 res/xml/provider_paths.xml

`

?xml version="1.0" encoding="utf-8"?

paths

external-path name="JDTobs" path=""/

files-path name="name" path="path" /

cache-path name="name" path="path" / external-path name="name" path="path" /

external-files-path name="name" path="path" /

external-cache-path name="name" path="path" / /paths `

读取uri

android中如何从SDcard中读取图片文件

用路径的方法寻找,BitmapFactory.decodeFile(路径)返回值是一个Bitmap,比如sdcard的根目录有个test.png,那么可以这么用BitmapFactory.decodeFile("mnt/sdcard/test.png")。然后ImageView之类的图片控件,可以用setImageBitmap(Bitmap)之类的方法,就可以使用sdcard中的图片了,

不过好像需要加一个权限的,就是在androidmanifest.xml中添加。

你说的读取系统一个小图标R.drawable.ic_menu_camera,其实也是用路径寻找的,不过被google封装起来了,用映射的方法寻找到相关路径下的文件。 比如R.drawable 就知道是res下面drawable-XX(根据系统配置,寻找不同文件夹下的图片)文件下的图片,比如R.layout 就是res下面layout下面的文件。SimpleAdapter可以算是一个测试用的设配器,最好自己尝试写设配器,自由空间比较大。

android如何读取图片

使用android-support-v4.jar中的加载器(Loader)来实现获取本机中所有图片,关于这个包在以前的文章中也提到,是一个非常有用的包,关于这个包的详细信息请大家查看官方文档:。

关于加载器(Loader)是在Android3.0中才开始引进并使用的,Android3.0以前的版本中要想使用加载器则需要用android-support-v4.jar来实现,我这个示例是基于Android2.2的。加载器(Loader)有什么作用呢?官方文档介绍是:它能够使用得在activity或fragment中异步加载数据变得更加容易,它具有以下的特点:

1.它们对每一个Activity和Fragment都是有效的。

2.它们提供了一种异步加载数据的能力。

3.它们监视数据源并且数据内容改变时将会传递新的结果。

4.当配置改变而被重新创建时,它们自动的会重连到上一个加载器的游标,然而,它们不需要重新查询数据。

android如何读取sd卡的图片并显示

首先你要在AndroidManifest.xml申请读取sdcard的权限

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" / !-- 向SDCard写入数据权限 --

关键代码:

package com.sdcardread;  

import java.io.File;  

import android.os.Bundle;  

import android.os.Environment;  

import android.widget.ImageView;  

import android.widget.LinearLayout;  

import android.widget.TextView;  

import android.app.Activity;  

import android.graphics.Bitmap;  

import android.graphics.BitmapFactory;  

public class MainActivity extends Activity {  

private TextView textView1;  

private LinearLayout linearLayout1;  

@Override  

protected void onCreate(Bundle savedInstanceState) {  

super.onCreate(savedInstanceState);  

setContentView(R.layout.activity_main);  

textView1 = (TextView) findViewById(R.id.textView1);  

linearLayout1 = (LinearLayout) findViewById(R.id.linearLayout1);  

boolean isSdCardExist = Environment.getExternalStorageState().equals(  

Environment.MEDIA_MOUNTED);// 判断sdcard是否存在  

if (isSdCardExist) {  

String sdpath = Environment.getExternalStorageDirectory()  

.getAbsolutePath();// 获取sdcard的根路径  

textView1.setText("sd卡是存在的。以下是sdcard下的img25.jpg!");  

String filepath = sdpath + File.separator + "img25.jpg";  

File file = new File(filepath);  

ImageView imageView = new ImageView(this);//创建一个imageView对象  

if (file.exists()) {  

Bitmap bm = BitmapFactory.decodeFile(filepath);  

// 将图片显示到ImageView中  

imageView.setImageBitmap(bm);  

linearLayout1.addView(imageView);  

}  

} else {  

textView1.setText("sd卡不存在!");  

}  

}  

}


分享标题:android读取图片,android获取图片uri
分享URL:http://cdkjz.cn/article/dsdscjj.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220