安卓开发-图像处理-图片的读取与保存

安卓开发-图像处理-图片的读取与保存


安卓开发-图像处理-图片的读取与保存_第1张图片

 

1.加载资源文件中的图片

在工程的 /drawable文件夹下黏贴一张图片(上面的图片)

安卓开发-图像处理-图片的读取与保存_第2张图片

 

1.1 使用 imageView.setImageResource( id ) 来读取资源文件中的图片

imageView.setImageResource(R.drawable.khy);

2.保存图片

        Context类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中。这个方法接受两个参数,第一个参数是文件名。在文件创建的时候使用的就是这个名称,注意这里指定的文件名不可以包含路径。因为所有的文件都是默认存储到/data/data//files/目录下的。第二个参数是文件的操作模式,主要有两种模式可选MODE_PRVATE和MODE _APPEND其中MODE_PRIVATE是默认的操作模式,表示当指定同样文件名的时候,所写人的内容将会覆盖原文件中的内容而MODE_APPEND则表示如果该文件已存在,就往文件里面追加内容,不存在就创建新文件。其实文件的操作模式本来还有另外两种:MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE,这两种模式表示允许其他的应用程序对我们程序中的文件进行读写操作,不过由于这两种模式过于危险,很容易引起应用的安全性漏洞,已在Android 4.2版本中被废弃。
       openFileOutput()方法返回的是个FileOutputStream对象,得到了这个对象之后就可以使用Java流的方式将数据写入到文件中了。

2.1 使用bitmap的compress(文件格式,图片质量,输出流)方法来进行位图的保存

bitmap.compress(Bitmap.CompressFormat.PNG, 100, openFileOutput("picture", Context.MODE_PRIVATE));

2.2 使用BitmapFactory.decodeResource()方法来获取资源文件中的一个位图对象

Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.khy);

3.加载存储空间中的图片资源

        类似于将数据存储到文件中,Context 类中还提供了一个openFileInput()方法,用于从文件中读取数据。这个方法要比openFile0utput()简单一些,它只接收-一个参数,即要读取的文件名,然后系统会自动到/data/data//files/目录下去加载这个文件,并返回一个FileInputStream对象,得到了这个对象之后再通过Java流的方式就可以将数据读取出来了。

3.1 使用BitmapFactory.decodeStream(openFileInput("picture"))从默认文件夹中获得图片文件

BitmapFactory.decodeStream(openFileInput("picture"));

完整代码

安卓开发-图像处理-图片的读取与保存_第3张图片

activity_main.xml



    

MainActivity.java (主界面)

package com.example.graphics_process;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.FileNotFoundException;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button bt_load_resorces_pic;
    Button bt_load_storage_pic;
    Button bt_save_pic;
    ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        bt_load_resorces_pic = findViewById(R.id.bt_load_resorces_pic);
        bt_load_storage_pic = findViewById(R.id.bt_load_storage_pic);
        bt_save_pic = findViewById(R.id.bt_save_pic);
        //主界面中的图片,用于测试保存图片
        imageView = findViewById(R.id.main_image);
        imageView.setImageResource(R.drawable.khy);

        bt_load_resorces_pic.setOnClickListener(this);
        bt_load_storage_pic.setOnClickListener(this);
        bt_save_pic.setOnClickListener(this);
    }


    /***
     * 保存图片
     * @param bitmap 将此图片保存到默认路径下
     */
    public void saveImage(Bitmap bitmap) {
        try {
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, openFileOutput("picture", Context.MODE_PRIVATE));
            Toast.makeText(this, "图片文件保存到默认文件夹下", Toast.LENGTH_SHORT).show();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt_load_resorces_pic:
                Intent intent = new Intent(this, Main2Activity.class);
                startActivity(intent);
                break;
            case R.id.bt_load_storage_pic:
                Intent intent1 = new Intent(this, Main3Activity.class);
                startActivity(intent1);
                break;
            case R.id.bt_save_pic:
                Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.khy);
                saveImage(bitmap);
                break;
            default:
                break;
        }

    }
}

activity_main2.xml(加载资源文件中的图片并显示)




    

Main2Activity.java

package com.example.graphics_process;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.widget.ImageView;

public class Main2Activity extends AppCompatActivity {
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        imageView = findViewById(R.id.imageView);
        //加载资源文件中的图片并显示
        imageView.setImageResource(R.drawable.khy);

    }
}

activity_main3.xml



    

Main3Activity.java(从默认文件夹中读取图片文件并显示)

package com.example.graphics_process;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;

import java.io.FileNotFoundException;

public class Main3Activity extends AppCompatActivity {
    ImageView image2;
    Bitmap bitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        image2 = findViewById(R.id.image2);
        //获取并显示从默认文件加中获得的位图
        image2.setImageBitmap(getImage());

    }
    private Bitmap getImage() {
        try {
            bitmap = BitmapFactory.decodeStream(openFileInput("picture"));

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return bitmap;
    }
}

注意:

这里一共测试了三个功能:

(1)加载资源文件中的图片资源并显示

(2)从默认APP文件夹下的存储路径读取并显示图片

(3)保存图片

注意:本次测试若没有测试第三步保存图片功能,第二步可能会报FileNotFound错误。

4.实验结果:

4.1 主界面展示

安卓开发-图像处理-图片的读取与保存_第4张图片

 

4.2 保存图片文件到默认路径下

安卓开发-图像处理-图片的读取与保存_第5张图片

 

你可能感兴趣的:(安卓开发)