android 42 获取图片

资源中获取图片:可以从工程assets文件夹、res/drawble文件夹、sd卡、服务端下载图片。

页面:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btnDecodeFile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="从文件解析图片" />

    <Button
        android:id="@+id/btnDecodeStream"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="丛输入流解析" />

    <Button
        android:id="@+id/btnDecodeResource"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="从项目res/drawble中解析" />

    <Button
        android:id="@+id/btnDecodeByteArray"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="从字节数组解析" />
    <ImageView                             显示解析的图片
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"/>
</LinearLayout>

java

package com.sxt.day06_08;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class MainActivity extends Activity {
    ImageView mImageView;
    static final String FILE_NAME="sxt_logo.png";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        setListener();
    }

    private void setListener() {
        setResetClickListener();
        setDecodeFileClickListener();
        setDecodeResourceClickListener();
        setDecodeStreamClickListener();
        setDecodeByteArrayClickListener();
    }

    private void setDecodeByteArrayClickListener() {
        findViewById(R.id.btnDecodeByteArray).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(){
                    public void run() {
                        HttpGet get=new HttpGet("http://10.0.2.2/"+FILE_NAME);//服务端资源文件路径
                        HttpClient client=new DefaultHttpClient();
                        try {
                            HttpResponse response = client.execute(get);
                            HttpEntity entity = response.getEntity();//
                            byte[] data = EntityUtils.toByteArray(entity);
                            final Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                            //工作线程不能修改UI,可以用Handler做,runOnUiThread方法会把里面的代码发送给主线程,修改UI。
                            //Runnable可以被多个线程共享,工作线程可以把该Runnable对象交给主线程由主线程执行。
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    mImageView.setImageBitmap(bitmap);
                                }
                            });
                        } catch (ClientProtocolException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }finally{
                            if(client!=null){
                                client.getConnectionManager().shutdown();//关闭
                            }
                        }
                    };
                }.start();
            }
        });
    }

    private void setDecodeStreamClickListener() {
        findViewById(R.id.btnDecodeStream).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
                File file=new File(dir, FILE_NAME);//sd卡图片路径
                FileInputStream in=null;
                try {
                    in=new FileInputStream(file);
                    Bitmap bitmap = BitmapFactory.decodeStream(in);
                    mImageView.setImageBitmap(bitmap);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }finally{
                    if(in!=null){
                        try {
                            in.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        });
    }

    private void setDecodeResourceClickListener() {
        findViewById(R.id.btnDecodeResource).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mImageView.setImageResource(R.drawable.sxt_logo);
            }
        });
    }

    private void setResetClickListener() {//点击图片还原
        findViewById(R.id.iv).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mImageView.setImageResource(R.drawable.ic_launcher);
            }
        });
    }

    //获取sd卡的图片文件
    private void setDecodeFileClickListener() {
        findViewById(R.id.btnDecodeFile).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);//sd卡的图片的路径
                File file=new File(dir, FILE_NAME);//获取sd卡的图片文件
                Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
                mImageView.setImageBitmap(bitmap);
            }
        });
    }

    private void initView() {
        mImageView=(ImageView) findViewById(R.id.iv);
    }
}

工程描述文件添加:

    <uses-permission android:name="android.permission.INTERNET"/>     申请网络权限
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>   申请读sd卡权限
时间: 2024-10-14 18:12:52

android 42 获取图片的相关文章

Android中获取图片的宽和高

在Android中,我们想获取图片的宽和高应该怎么办?一.正常加载图片的方法下获取宽和高 举一个简单的例子:创建一个图片的副本 //加载原图 Bitmap bmSrc = BitmapFactory.decodeResource(getResources(), R.drawable.photo3); //创建副本 //1.创建与原图一模一样大小的bitmap对象,该对象中目前是没有内容的,可以比喻为创建了和原图一样大小 //的白纸 Bitmap bmCopy = Bitmap.createBit

android网络获取图片并保存在本地

获取网络上的图片有三步: 一.设置连接网络的权限和写入读取SD卡的权限.二.网络访问获得数据流. 三.在SD卡中创建文件夹将数据流转成图片格式存储. 注意:response.getEntity().getContent()方法,而此方法只能调用一次.否则会报错:java.lang.IllegalStateException: Content has been consumed. manifest.xml 赋予权限,注意:在<application...>application>前添加 &

Android图片系列(1)-------调用系统相册与相机获取图片

Android开发过程中,我们经常需要获取图片,你可以通过获取手机相册的图片,也可以调用相机拍照获取图片.这里主要讲这两个获取图片的方式,并记录其中遇到的小问题. 调用相册获取图片 这个功能非常简单,这里不多说了,这里贴出关键代码 Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT); openAlbumIntent.setType("image/*"); startActivityForResult(openAl

Android中获取选择图片与获取拍照返回结果差异

导语: 如今的安卓应用在选择图片的处理上大多合并使用拍照和从相册中选择这两种方式(当然这是产品dog的事,开篇跑题...) 今天在写一个这样的功能模块遇到一个尴尬的问题,同样是拍照获取图片功能,在同事的三星上跑没问题,但是在我的手机上一跑就崩(吐槽一下国产厂商对android的系统级改造真是太大,连错误日志都打不出来,还有老板啥时候给我配个测试机呗),下面是在某型手机上测试的报错结果 错误报告: 10-21 17:41:43.634: E/AndroidRuntime(32683): FATAL

android获取图片的旋转角度

public static int getExifOrientation(String filepath) { int degree = 0; ExifInterface exif = null; try { exif = new ExifInterface(filepath); } catch (IOException ex) { Log.d(TAG, "cannot read exif" + ex); } if (exif != null) { int orientation =

android 从相册获取图片

从相册获取图片 在android应用中是运用得很多的一项技术了 其实很简单 使用intent就可以了 刚敲了一个dome  睡觉之前还是分享一下把 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match

android从网络获取图片

http://blog.csdn.net/wangjinyu501/article/details/8219317 http://www.cnblogs.com/JerryWang1991/archive/2012/03/09/2388312.html http://blog.csdn.net/liuhe688/article/details/6532519 http://blog.csdn.net/abc5382334/article/details/17097633 http://www.t

Android调用gallery获取图片

从gallery中获取图片 步骤: 步骤一: // 激活系统图库应用,选择一张图片 Intent intent = new Intent(); // 活动操作:选择一个项目从数据,返回被选中 intent.setAction(Intent.ACTION_PICK); // 设置意图的类型 intent.setType("image/*"); // 设置开启意图 // 设置的是有返回值的意图开启需要重写onActivityResult startActivityForResult(int

Android中使用OKHttp上传图片,从相机和相册中获取图片并剪切

效果: 注意:1:网络权限<uses-permission android:name="android.permission.INTERNET"></uses-permission>2:我封装了一个OKHttp,需要在build.gradle 中加入compile 'com.squareup.okhttp3:logging-interceptor:3.4.2' 在同步一在3:用SharedPreferences 保存和获取图片了,将图片和字符串进行了转换4: 可