开发者

Android, can't read images I saved to data folder

开发者 https://www.devze.com 2023-02-21 22:10 出处:网络
My app uses the following piece of code to write out images I have resized into the app\'s data folder:

My app uses the following piece of code to write out images I have resized into the app's data folder:

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();
        }
    }

I am able to read them in a file browser (ddms) and can confirm they appear to have been written.

However, any attempt to load the images results in non-null bitmaps with width and height of -1. I am using the following code to load them:

imageList = getFilesDir().list();

Bitmap bmp = null;

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

EDIT: On further inspection, it seems, after conversion the images are of density 160 (and not 240 as they should be) also, after testing a working application it seems the -1 mWidth and -1 mHeight on the bitmaps is irrelevent.


I had same problem.my data folder given smallest image.and cursor return null pointer exception on my getDestination method.then i fixed like it

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);

}

And i use like in 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;
    }
}

I hope give you any idea for your problem.

0

精彩评论

暂无评论...
验证码 换一张
取 消