Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-如何从内部存储中存储和检索图像_Android_Image - Fatal编程技术网

Android-如何从内部存储中存储和检索图像

Android-如何从内部存储中存储和检索图像,android,image,Android,Image,我想从相机中拍摄图像并存储,然后从内部存储器中查看 public String saveToInternalSorage(Bitmap bitmapImage, String fileName){ File file = new File(createBasePath(), fileName + ".png"); FileOutputStream fos = null; try { fos = new Fi

我想从相机中拍摄图像并存储,然后从内部存储器中查看

public String saveToInternalSorage(Bitmap bitmapImage, String fileName){       

        File file = new File(createBasePath(),  fileName + ".png");
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(file);
            bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return file.getName();
    }

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == TAKE_PIC && resultCode == RESULT_OK) {
            Intent i=new Intent(Intent.ACTION_VIEW);
            i.setDataAndType(Uri.fromFile(output), "image/png");
            startActivity(i);
        }
    }
我用这个代码从相机上拍摄图像

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PIC);
我尝试了以下方法将位图保存在内部存储器中

public String saveToInternalSorage(Bitmap bitmapImage, String fileName){       

        File file = new File(createBasePath(),  fileName + ".png");
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(file);
            bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return file.getName();
    }

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == TAKE_PIC && resultCode == RESULT_OK) {
            Intent i=new Intent(Intent.ACTION_VIEW);
            i.setDataAndType(Uri.fromFile(output), "image/png");
            startActivity(i);
        }
    }
我的路径是
/data/user/0/com.dev/app/14543514000/33352/capture_Image1.png
但在这里,我面临一个问题。位图大小非常小。我想知道我从相机上拍摄的确切图像

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PIC);
然后我找到了一个解决办法。在意图之前设置路径。所以我试着这样做

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 output = new File(createBasePath(), "capture_Image1" + ".png"); 
 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output));
 startActivityForResult(intent, TAKE_PIC);
当我使用此代码时,图像不会显示。在
onActivityResult
上,
resultCode
显示-1

如果我使用以下代码

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 File dir= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
 output=new File(dir, "CameraContentDemo.png");
 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output));
 startActivityForResult(intent, TAKE_PIC);
此代码运行良好。拍摄图像后,它会显示图像


因此,请让我知道如何以原始质量从内部数据库存储和检索图像。

如果您计划将其存储在SQLite中,请记住,您获得的光标限制为1MB,因此如果存储字节,您可能不会收到图像。改为存储路径,并从路径中获取图像。我已经仅使用此代码。如果我使用此代码,图像将丢失其原始质量。这是我的问题。我需要精确的图像。我想把它存储在内部存储器中。不在外部存储器中。
   Below is code to save the image to internal directory.

    private String saveToInternalStorage(Bitmap bitmapImage){
            ContextWrapper cw = new ContextWrapper(getApplicationContext());
             // path to imageDir
            File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
            // Now Create imageDir
            File mypath=new File(directory,"abc.jpg");

            FileOutputStream foss = null;
            try {           
                foss = new FileOutputStream(mypath);
           // Using compress method on the BitMap object to write image to the OutputStream
                bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, foss);
            } catch (Exception e) {
                  e.printStackTrace();
            } finally {
                  foss.close(); 
            } 
            return directory.getAbsolutePath();
        }


Use below code for Reading a file from internal storage

private void loadImageFromStorage(String path)
{

    try {
        File f=new File(path, "abc.jpg");
        Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f));
            ImageView img=(ImageView)findViewById(R.id.imgPicker);
        img.setImageBitmap(b);
    } 
    catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }

}