android get Bitmap or sound from assets

前端 未结 5 1216
陌清茗
陌清茗 2020-12-08 06:34

I need to get Bitmap and sound from assets. I try to do like this:

BitmapFactory.decodeFile(\"file:///android_asset/Files/Numbers/l1.png\");
<
相关标签:
5条回答
  • 2020-12-08 07:11
    public static Bitmap getBitmapFromAsset(Context context, String filePath) {
        AssetManager assetManager = context.getAssets();
    
        InputStream istr;
        Bitmap bitmap = null;
        try {
            istr = assetManager.open(filePath);
            bitmap = BitmapFactory.decodeStream(istr);
        } catch (IOException e) {
            // handle exception
        }
    
        return bitmap;
    }
    

    the path is simply your file name fx bitmap.png. if you use subfolder bitmap/ then its bitmap/bitmap.png

    0 讨论(0)
  • 2020-12-08 07:16

    Use this code its working

    try {
        InputStream bitmap=getAssets().open("icon.png");
        Bitmap bit=BitmapFactory.decodeStream(bitmap);
        img.setImageBitmap(bit);
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    

    Update

    While decoding Bitmap we more often meet with memory overflow exception if Image size is very big. So reading article How to display Image efficiently will help you.

    0 讨论(0)
  • 2020-12-08 07:33

    Kotlin way, with auto close of the input stream. You have to handle exceptions on your own.

    private fun getBitmapFromAsset(context: Context, path: String): Bitmap =
            context.assets.open(path).use { BitmapFactory.decodeStream(it) }
    
    0 讨论(0)
  • 2020-12-08 07:36

    The accepted answer never closes the InputStream. Here is a utility method for getting a Bitmap in the assets folder:

    /**
     * Retrieve a bitmap from assets.
     * 
     * @param mgr
     *            The {@link AssetManager} obtained via {@link Context#getAssets()}
     * @param path
     *            The path to the asset.
     * @return The {@link Bitmap} or {@code null} if we failed to decode the file.
     */
    public static Bitmap getBitmapFromAsset(AssetManager mgr, String path) {
        InputStream is = null;
        Bitmap bitmap = null;
        try {
            is = mgr.open(path);
            bitmap = BitmapFactory.decodeStream(is);
        } catch (final IOException e) {
            bitmap = null;
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException ignored) {
                }
            }
        }
        return bitmap;
    }
    
    0 讨论(0)
  • 2020-12-08 07:38

    Method to get bitmap of image which is stored in Assets folder.

           public static Bitmap getBitmapFromAssets(Context context, String fileName, int width, int height) {
            AssetManager assetManager = context.getAssets();
    
            InputStream istr;
            Bitmap bitmap = null;
            try {
                final BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = true;
    
                istr = assetManager.open(fileName);
    
                // Calculate inSampleSize
                options.inSampleSize = calculateInSampleSize(options, width, height);
    
                // Decode bitmap with inSampleSize set
                options.inJustDecodeBounds = false;
                return BitmapFactory.decodeStream(istr, null, options);
            } catch (IOException e) {
                Log.e("hello", "Exception: " + e.getMessage());
            }
    
            return null;
        }
    

    Method to resize the bitmap.

     private static int calculateInSampleSize(
                BitmapFactory.Options options, int reqWidth, int reqHeight) {
            // Raw height and width of image
            final int height = options.outHeight;
            final int width = options.outWidth;
            int inSampleSize = 1;
    
            if (height > reqHeight || width > reqWidth) {
    
                final int halfHeight = height / 2;
                final int halfWidth = width / 2;
    
                // Calculate the largest inSampleSize value that is a power of 2 and keeps both
                // height and width larger than the requested height and width.
                while ((halfHeight / inSampleSize) >= reqHeight
                        && (halfWidth / inSampleSize) >= reqWidth) {
                    inSampleSize *= 2;
                }
            }
    
            return inSampleSize;
        }
    
    0 讨论(0)
提交回复
热议问题