当前位置:首页 » 安卓系统 » android图片读取

android图片读取

发布时间: 2023-06-15 16:44:34

① 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 读取图片流为空

直接用BitmapFactory.decodeFile(pathName);就可以读取。
或者用你的方式,BitmapFactory.decodeStream(fosfrom);
而且你这种读取方式也不对。你把一个图片分成多次读取,ByteArrayInputStream流里只保存了最后一份数据,怎么可能是个完整的图片。

③ android怎么用流 读取云端图片

java 直接用BitmapFactory.decodeFile(pathName);就可以读取。
或者用你的方式,BitmapFactory.decodeStream(fosfrom);
SE的学习过程中,我们就接触到了I/O流的概念,并且使用了一些文件输入输出流的API来将数据保存到文件或者是从文件中读取数据。同样,这个手段也适用于Android系统,我们可以在应用开发过程中使用文件相关的API方法。

何谓内部存储呢?实际上就是指将程序的私有数据以文件的形式存储在Android设备的内存中。同理,如果是存放在SD卡等地方,就称之为外部存储。

我们在,你需要建立文件的输入输出流,并在流中操作数据。

首先是写文件。
为了使用内部存储向文件中写入一些数据,你可以调用openFileOutput()方法,需要的参数为文件名和写入模式。写入模式实际上就是该文件的权限归属,可以是公有的,也可以是私有的。如何具体地创建一个文件输出流呢,具体方式如下:

FileOutputStream fileOut =
openFileOutput("file_name",MODE_WORLD_READABLE);

//第一个参数即文件名,第二个参数表示文件存储的模式

对于第二个参数,需要补充的是:文件存储的模式公有四种:

MODE_PRIVATE:该模式是默认的,通过该模式创建的文件是私有的,即只能被应用本身访问。注意:在该模式下写入的内容会覆盖原有的内容。

MODE_APPEND:与上个模式类似,但在写入内容时会检查待创建的文件是否存在。若文件已被创建,则往该文件中追加内容,而不是覆盖原来的内容;若文件未被创建,则创建新的文件。

MODE_WORLD_READABLE:表示当前创建的这个文件允许被其他应用读取。

MODE_WORLD_WRITEABLE:表示当前创建的这个文件允许被其他应用写入。

默认情况下,不仅是应用创建的文件,包括Shared
Preferences和数据库,都是私有的。那么问题来了,如果希望其他应用既能读又能写,应该怎么办呢?参考下面这种用法:

FileOutputStream fileOut = openFileOutput("file_name",MODE_WORLD_READABLE +
MODE_WORLD_WRITEABLE);

而对于openFileOutput()方法,它返回的是一个FileOutputStream实例。换言之,你通过文件输出流对象中得到了这个实例,随后你便可以调用写相关的方法来向文件写入数据。具体的用法如下:

String str = "shiyanlou";

//待写入的数据

fOut.write(str.getBytes());

//实际上写入文件的是一个字节数组,我们用gettBytes()方法将其转换成目标格式

fOut.close();

//记得写入完毕后要用close()结束

接下来是读文件。
怎样读取我们刚刚创建的这个文件呢?你应该猜到了,是使用openFileInput()方法。该方法需要填入待读取文件的文件名,同样,它返回的是一个FileInputStream的实例。具体用法如下:

FileInputStream fileIn = openFileInput(file);

在打开输入流后,你可以调用read()方法每次从文件中读出一个字符出来,然后装入一个字符串变量中。具体做法如下:

int ch;

String temp="";

while( (ch = fin.read()) != -1){

temp = temp + Character.toString((char)ch);

//不断地追加读取的内容

}

//通过一个for循环,你最后得到的temp字符串包含了文件中的所有数据

fileIn.close();

//记得要关闭输入流

除了上面我们用到的这些方法(比如write()、read()和close()),FileOutputStream和FileInputStream类中还有很多常用的方法,我们在下面作一简要介绍。

FileOutputStream类中的其它常用方法:

write(byte[] b, int off, int len):该方法从指定的字节数组开始到该文件输出流关闭写入len字节。

getChannel():该方法返回一个只读的、与文件输出流关联的文件通道对象(FileChannel)

getFD():该方法返回与此流有关的文件描述符对象(FileDescriptor)

FileInputStream类中的其它常用方法:

read(byte[] b, int off, int len):该方法从输入流中数据读取最多len个字节到字节数组

getChannel():该方法返回一个只读的、与文件输出流关联的文件通道对象(FileChannel)

getFD():该方法返回与此流有关的文件描述符对象(FileDescriptor)

available():该方法可通过一个方法的调用者从输入流中阻止这个输入流返回可以读取(或跳过)的字节数的估计值。

四、在Android上实现文件读写

下面我们通过一个实例来学习如何将Java中常用的文件读写沿用到Android中去。

实验步骤主要有:

(若你已在第二小节完成,请跳至下一步)使用Android
Studio创建应用项目FileIOPractice,包名为com.shiyanlou.android.fileiopractice,基于Android
5.1制作。同时添加MainActivity及其布局资源文件。

创建并打开AVD模拟器(镜像选择API22:Android 5.1.1)。

在res/layout/activity_main.xml资源文件放入一些文本框和按钮。

在MainActivity.java中,初始化要用到的控件,添加文件读写相关的代码。

编译并运行这个应用,等待应用安装至模拟器,在模拟器中使用该应用。

现在你可以按照上述步骤自己完成该实验。下面也给出了本实验涉及到的源代码和资源文件详情,在必要时你可以使用它们。在注释中我们也对一些模块进行了详细的讲解。

以下是MainActivity的布局文件res/layout/activity_main.xml:

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"

android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/textview_domain"

android:text="Shiyanlou.com"

android:textSize="40dp"

android:textColor="#11AA8C"

android:layout_alignParentTop="true"

android:layout_centerHorizontal="true" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/textView_appName"

android:text="File I/O Practice"

android:layout_below="@+id/textview_domain"

android:layout_centerHorizontal="true"

android:textColor="#000000"

android:textSize="40dp" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/editText"

android:hint="Input some text here."

android:focusable="true"

android:layout_marginTop="20dp"

android:layout_below="@+id/textView_appName"

android:layout_alignEnd="@+id/textView_appName"

android:layout_alignLeft="@+id/textView_appName"

android:layout_alignStart="@+id/textView_appName"

android:layout_alignRight="@+id/textView_appName"

android:inputType="textMultiLine"

android:minLines="5"

android:background="#DDDDDD" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/textView_data"

android:text="Text would be shown here."

android:layout_below="@+id/button_save"

android:layout_marginTop="10dp"

android:layout_centerHorizontal="true" />

android:layout_width="120dp"

android:layout_height="wrap_content"

android:id="@+id/button_save"

android:text="Save File"

android:textColor="#FFFFFF"

android:background="#11AA8C"

android:layout_alignLeft="@+id/textView_appName"

android:layout_alignStart="@+id/textView_appName"

android:layout_below="@+id/editText"

android:layout_marginTop="20dp"/>

android:layout_width="120dp"

android:layout_height="wrap_content"

android:id="@+id/button_load"

android:text="Load File"

android:textColor="#FFFFFF"

android:background="#11AA8C"

android:layout_alignTop="@+id/button_save"

android:layout_alignRight="@+id/editText"

android:layout_alignEnd="@+id/editText" />

以下是src/MainActivity.java中的源代码:

package com.shiyanlou.android.fileiopractice;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

import java.io.FileInputStream;

import java.io.FileOutputStream;

public class MainActivity extends Activity {

private Button button_save;

private Button button_load;

private TextView textView_status;

private EditText editText;

//声明各个控件

private String data;

private String file = "shiyanlou_file";

//声明用于存放数据的变量data和文件名常量file

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

button_save =(Button)findViewById(R.id.button_save);

button_load =(Button)findViewById(R.id.button_load);

editText =(EditText)findViewById(R.id.editText);

textView_status =(TextView)findViewById(R.id.textView_data);

//实例化各个控件

//为按钮设置点击事件监听器

//首先是保存按钮(写操作)

button_save.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

data = editText.getText().toString();

//调用getText()方法从文本框中读取内容,使用toString()方法将其转化为String类型数据,并存放到data变量中

try {

//对于文件读写操作应使用异常处理流程

FileOutputStream fileOut = openFileOutput(file, MODE_APPEND);

// 此处用到了MODE_PRIVATE,在新版本的Android系统中,不推荐使用MODE_WORLD_READABLE等模式

// 这是因为Android中为应用间的数据交互提供了更好的支持,如Content Privoder等,你可一进步了解

fileOut.write(data.getBytes());

//用write()方法保存数据

fileOut.close();

//关闭输出流

Toast.makeText(getBaseContext(), "File saving completed.",
Toast.LENGTH_SHORT).show();

//用一个Toast来告诉用户已经写入完毕了

} catch (Exception e) {

e.printStackTrace();

}

}

});

//其次是读取按钮(读操作)

button_load.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

try {

//同理,建立文件输入流

FileInputStream fileIn = openFileInput(file);

int ch;

//声明一个整型变量ch用于接收数据

String tempText = "";

//这里的tempText用于临时存放读取的数据(字符串)

while ((ch = fileIn.read()) != -1) {

//这里的-1是特定的状态码,表示文件读取结束

//在while循环中逐个读取数据,并追加到tempText中

tempText = tempText + Character.toString((char) ch);

//将ch转化为字符

}

textView_status.setText(tempText);

//读取完毕后将文字显示出来

Toast.makeText(getBaseContext(), "File reading completed.",
Toast.LENGTH_SHORT).show();

//同样用一个Toast告知用户已经读取完成

} catch (Exception e) {

}

}

});

}

}

检查一下代码,编译并运行该应用。在模拟器中尝试输入一些信息,保存一下,再试着读取它们。

④ android 存在数据库中的动态图片,如何读取出来,显示在ImageView中

实现的功能为从服务器获取图片数据,在布局页面上显示。由于图片的个数是不确定的,因此采用在布局页面中定义多个ImageView来显示图片是不合理的。
(一)首先定义布局

android:id="@+id/id_layout_movie"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
(二)加载图片显示时获取到布局文件
RelativeLayout rl_Movie = (RelativeLayout) findViewById(R.id.id_layout_movie);
(三)依次循环服务器获取的图片数据,一张一张设置图片显示的位置
//newWidth为图片显示的宽度,newHeight为图片显示的高度
RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams( newWidth, newHeight);
设置lp1.leftMargin和lp1.topMargin的值
(四)最后设置rl_Movie.addView(iv, lp1)将图片加入布局文件中

⑤ android应用程序中可以直接从资源文件之中进行图片资源的读取操作类是

Http网络工具类,主要包括httpGet、httpPost以及http参数相关方法,以httpGet为例:staticHttpResponsehttpGet(HttpRequestrequest)staticHttpResponse。
httpGet(java.lang.StringhttpUrl)staticStringhttpGetString(StringhttpUrl)包含以上三个方法,默认使用gzip压缩,使用bufferedReader提高读取速度。HttpRequest中可以设置url、timeout、userAgent等其他http参数HttpResponse中可以获取返回内容、http响应码、http过期时间(Cache-Control的max-age和expires)等前两个方法可以进行高级参数设置及丰富内容返回,第三个方法可以简单的传入url获取返回内容,httpPost类似。更详细的设置可以直接使用HttpURLConnection或apache的HttpClient。源码可见HttpUtils.java,更多方法及更详细参数介绍可见HttpUtilsApiGuide。

⑥ Android 简单的图片查看器

说明:在文件管理器中,可以使用这个app来打开图片

ImageView 常用的一些XML属性和方法:

支持的scaleType 属性:

在打开图片的Activity里需要必须设置以下三个属性:

可以通过设置 mimeType 来关联对应的类型,比如: mimeType="vedio/* 关联视频格式的文件等。

详细可以参考: Android 常用 mimeType 表

读取图片,需要写入到外部存储器(SD卡)的权限:
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

如果是 API23 以上还需要动态权限:

自定义权限的格式: 包名.permission.权限名
自定义权限需要在 Manifest 文件里使用 <permission android:name="..." /> 语法 进行注册。
PackageManager.PERMISSION_GRANTED 表示权限允许; PackageManager.PERMISSION_DENIED 表示权限拒绝。

⑦ 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;i<count;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如何读取sd卡的图片并显示

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

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

关键代码:

packagecom.sdcardread;

importjava.io.File;

importandroid.os.Bundle;
importandroid.os.Environment;
importandroid.widget.ImageView;
importandroid.widget.LinearLayout;
importandroid.widget.TextView;
importandroid.app.Activity;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;

{
privateTextViewtextView1;
;

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1=(TextView)findViewById(R.id.textView1);
linearLayout1=(LinearLayout)findViewById(R.id.linearLayout1);
booleanisSdCardExist=Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);//判断sdcard是否存在
if(isSdCardExist){
Stringsdpath=Environment.getExternalStorageDirectory()
.getAbsolutePath();//获取sdcard的根路径
textView1.setText("sd卡是存在的。以下是sdcard下的img25.jpg!");
Stringfilepath=sdpath+File.separator+"img25.jpg";
Filefile=newFile(filepath);
ImageViewimageView=newImageView(this);//创建一个imageView对象
if(file.exists()){
Bitmapbm=BitmapFactory.decodeFile(filepath);
//将图片显示到ImageView中
imageView.setImageBitmap(bm);
linearLayout1.addView(imageView);
}
}else{
textView1.setText("sd卡不存在!");
}

}

}
热点内容
bin存储 发布:2025-02-07 20:00:50 浏览:202
android加载界面 发布:2025-02-07 19:55:28 浏览:870
好矿云服务器 发布:2025-02-07 19:54:31 浏览:948
java电话簿 发布:2025-02-07 19:49:26 浏览:796
超级脚本制作 发布:2025-02-07 19:31:30 浏览:486
怎么查看支付宝的账号密码 发布:2025-02-07 19:26:48 浏览:16
惠普服务器查看ip指令 发布:2025-02-07 19:26:47 浏览:434
算法设计模式 发布:2025-02-07 19:15:52 浏览:746
服务器1u能连接几台电脑 发布:2025-02-07 18:50:02 浏览:154
立人编译 发布:2025-02-07 18:48:32 浏览:766