Android显示PNG文件

时间:2015-09-21 14:53:51

标签: android image image-processing

我正在使用网络上的代码示例来捕获签名 此代码似乎工作正常,它将签名图像保存为我的Application Files目录中的PNG文件(我想要的位置)。
代码是:

        public void save(View v)
    {
        FileDir = getApplicationContext().getFilesDir().getPath();  // "/data/data/<myapp>/files/"
        current = "capturedsignature.png";

        mypath = new File(FileDir, current);

        if(mBitmap == null)
        {
            mBitmap =  Bitmap.createBitmap (mContent.getWidth(), mContent.getHeight(), Bitmap.Config.RGB_565);;
        }
        Canvas canvas = new Canvas(mBitmap);
        try
        {
            FileOutputStream mFileOutStream = new FileOutputStream(mypath);
            //FileOutputStream mFileOutStream = getApplicationContext().openFileOutput(mypath.toString(), Context.MODE_WORLD_READABLE);

            v.draw(canvas);
            mBitmap.compress(Bitmap.CompressFormat.PNG, 90, mFileOutStream);
            mFileOutStream.flush();
            mFileOutStream.close();
            //String url = Images.Media.insertImage(getContentResolver(), mBitmap, "title", null);
        }
        catch(Exception e)
        {
            Log.v("log_tag", e.toString());
        }
    }

同样,那部分似乎工作得很好。 我甚至通过检查:mypath.exists()确认文件已保存,并且它是TRUE

现在我想以另一种方式使用该签名 但在我尝试使用它之前,我想确保它保存好了。
为了做到这一点,我暂时添加了一个图像确认布局,我想在其中显示签名 但是我无法让它工作 - 而且由于它不起作用,我猜我的真实用途也不会起作用。

所以这是我用来检索和显示PNG文件的代码。

        // Build Signature File Pathed Reference
    ContextWrapper cw = new ContextWrapper(getApplicationContext());
    File directory = cw.getDir(getResources().getString(R.string.external_dir), Context.MODE_WORLD_READABLE);
    String FileDir = getApplicationContext().getFilesDir().getPath();  // "/data/data/<myapp>/files/"

    String ImgFileName = WorkingStorage.GetCharVal(Defines.SignatureFile, getApplicationContext());
    String ImgFileStr = FileDir +  "/" + ImgFileName;
    File ImgFile = new File(getApplicationContext().getFilesDir().getPath(), ImgFileName);

    //check if image exists
    FileInputStream in;
    BufferedInputStream buf;
    try {
        in = new FileInputStream(ImgFileStr);
        buf = new BufferedInputStream(in);
        Bitmap bMap = BitmapFactory.decodeStream(buf);
        ImgView.setImageBitmap(bMap);
        if (in != null) {
            in.close();
        }
        if (buf != null) {
            buf.close();
        }
    } catch (Exception e) {
        Log.e("Error reading file", e.toString());
    }

在观察代码执行时,我检查要检索的文件是否存在:ImgFile.exists()并且我得到TRUE
尽管正在显示的图像全部出现黑色 - 而不是我认为我保存的签名图像。

这里的参考目的是用于显示ImgView的布局XML代码 注意 - 在另一个应用程序中,我使用此布局将JPG文件保存到目录:/ storage / emulated / 0并检索它以供查看。这很好。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffffff"
android:orientation="horizontal">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Review Plate Image"
    android:id="@+id/textView"
    android:layout_alignParentTop="true"
    android:layout_marginTop="50dp"
    android:layout_centerHorizontal="true"
    android:textSize="36dp"
    android:textColor="@android:color/black" />

<ImageView
    android:id="@+id/image_review"
    android:layout_width="380dp"
    android:layout_height="285dp"
    android:layout_alignParentLeft="true"
    android:layout_centerInParent="true"
    android:paddingLeft="5dp"
    android:paddingTop="20dp" >
</ImageView>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="20dp"
    android:layout_marginTop="70dp"
    android:layout_alignParentBottom="true"
    android:gravity="center"
    android:layout_below="@+id/image_review">

    <Button
        android:id="@+id/SaveBtn"
        android:layout_width="100dp"
        android:layout_height="40dp"
        android:text="Save"
        android:textStyle="bold"
        android:textSize="20dp"/>

    <Button
        android:id="@+id/NoSaveBtn"
        android:layout_width="100dp"
        android:layout_height="40dp"
        android:layout_marginLeft="20dp"
        android:text="Delete"
        android:layout_toRightOf="@+id/SaveBtn"
        android:textStyle="bold"
        android:textSize="20dp"/>
</RelativeLayout>

我做错了什么?

非常感谢任何建议/意见 感谢

1 个答案:

答案 0 :(得分:0)

尝试使用文件流,

Bitmap bMap = BitmapFactory.decodeFile(FileDir +  "/" + ImgFileName);

然后

ImgView.setImageBitmap(bMap);

希望它有效..