Android,无法读取我保存到数据文件夹的图像

时间:2011-04-05 07:51:27

标签: android image bitmap

我的应用程序使用以下代码将我已调整大小的图像写入应用程序的数据文件夹:

private void writeImage(Bitmap bmp, String filename)
    {
        try 
        {
            FileOutputStream stream = openFileOutput(filename, MODE_WORLD_WRITEABLE);
            bmp.compress(CompressFormat.PNG, 100, stream);
            stream.flush();
            stream.close();
        }
        catch(Exception e) 
        {
            e.printStackTrace();
        }
    }

我能够在文件浏览器(ddms)中阅读它们并确认它们似乎已被写入。

但是,任何加载图像的尝试都会产生宽度和高度为-1的非空位图。我使用以下代码加载它们:

imageList = getFilesDir().list();

Bitmap bmp = null;

        for(String img : imageList)
        {
            try {
                bmp = BitmapFactory.decodeStream(openFileInput(img));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

编辑:在进一步检查时,似乎在转换后图像的密度为160(而不是应该是240),在测试工作应用程序后,它似乎是-1 mWidth和-1 mHeight on位图是无关紧要的。

1 个答案:

答案 0 :(得分:0)

我有同样的问题。我的数据文件夹给出了最小的image.and游标在我的getDestination方法上返回空指针异常。然后我修好了它

public void captureNewPhoto() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    targetFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
    targetUri = Uri.fromFile(targetFile);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, targetUri);
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
    startActivityForResult(intent, 12);

}
  

我在onActivityResult();

中使用
 BitmapFactory.Options options = new BitmapFactory.Options();
            networkBitmap = BitmapFactory.decodeFile(targetUri.getPath(),
                    options);
            //ImageDialog(networkBitmap);
            //String path = getRealPathFromUri(this, Uri.parse(targetUri.getPath()));
            String myDeviceModel = android.os.Build.MODEL;
            deviceName = Build.MANUFACTURER;
            if (myDeviceModel.equals("GT-I9500")) {
            } else if (deviceName.contains("samsung")) {
            } else {
                exif = ReadExif(targetUri.getPath());
                if (exif.equals("6")) {
                    matrixx.postRotate(90);
                } else if (exif.equals("7")) {
                    matrixx.postRotate(-90);
                } else if (exif.equals("8")) {
                    matrixx.postRotate(-90);
                } else if (exif.equals("5")) {
                    matrixx.postRotate(-90);
                }
                //matrixx.postRotate(-90);
            }
            networkBitmap = Bitmap.createBitmap(networkBitmap, 0, 0, networkBitmap.getWidth(), networkBitmap.getHeight(), matrixx, true);
            Log.e("Taget File ", "Size " + targetFile.length());

            if (networkBitmap != null) {
                ImageSetting(networkBitmap, System.currentTimeMillis() + filename);
            }




public void ImageSetting(Bitmap imageBitmap, final String fileName) {

    networkBitmap = imageBitmap;
    organizator(networkBitmap, fileName);
    networkBitmap = null;

}` public void tamamlandiOndenFoto(Bitmap turnedBitmap, String filename) {
    frontFotoFile = storeBitmap(networkBitmap, filename);
    ondenFotoPath = ondenFoto.getAbsolutePath();
    ondenFotoImageView.setImageBitmap(turnedBitmap);

}`

public File storeBitmap(Bitmap bp, String fileName) {
    File sd = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    File dest = new File(sd, fileName);
    if (bp != null) {
        try {
            FileOutputStream out = new FileOutputStream(dest);
            bp.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("Alinan hata ", " Catch hata ", e);
        }
        return dest;
    } else {
        return null;
    }
}
  

我希望你能解决问题。