web-dev-qa-db-ja.com

アセットから画像を読み込む方法は?

特定のケースでPOT画像のサイズを変更する2.2.2のバグを避けるために、アセットから画像をロードする必要があります。これを回避する方法は、アセットディレクトリから画像ファイルをロードすることです。

私はこれをやろうとしています:

_        String imagePath = "radiocd5.png";
    AssetManager mngr = context.getAssets();
    // Create an input stream to read from the asset folder
    InputStream is=null;
    try {
        is = mngr.open(imagePath);
    } catch (IOException e1) {  e1.printStackTrace();}

    //Get the texture from the Android resource directory
    //InputStream is = context.getResources().openRawResource(R.drawable.radiocd5);
    Bitmap bitmap = null;
    try {
        //BitmapFactory is an Android graphics utility for images
        bitmap = BitmapFactory.decodeStream(is);

    } finally {
        //Always clear and close
        try {
            is.close();
            is = null;
        } catch (IOException e) {
        }
    }
_

しかし、is.close();行でNullPointerExceptionを取得しています

fileNotFoundException:radiocd5.pngをキャプチャしますが、そのファイルはアセットディレクトリにあります:S

何が悪いの?ファイルは_radiocd5.png_と呼ばれ、assetsディレクトリにあります

32

アセットからのデータの表示に関する私のチュートリアルに従うことができます: https://xjaphx.wordpress.com/2011/10/02/store-and-use-files-in-assets/
表示するロード画像とテキストを含むサンプル。

提供されたリンクの関連部分を追加しました(地震などの場合);-) Taifun

// load image
try {
    // get input stream
    InputStream ims = getAssets().open("avatar.jpg");
    // load image as Drawable
    Drawable d = Drawable.createFromStream(ims, null);
    // set image to ImageView
    mImage.setImageDrawable(d);
}
catch(IOException ex) {
    return;
}
64
Pete Houston

アセットdirを使用する代わりに、ファイルを/ res/rawに配置すると、次のURIを使用してファイルにアクセスできます:Android.resource://com.your.packagename/" + R.raw.radiocd5

4
user496854
    try {
        InputStream istr =this.context.getAssets().open(P.strImage);
        //set drawable from stream
        this.imgProduct.setImageDrawable(Drawable.createFromStream(istr, null));
    } catch (IOException e) {
        e.printStackTrace();
    }
3
yeahdixon
    protected String openImageInAssets(String imageName){
        String encodedImageBase64 = "";
        AssetManager assetManager = getAssets();
        InputStream fileStream = null;
        try {
            fileStream = assetManager.open(imageName);
            if(fileStream != null){
                //                  BitmapFactory.Options bfo = new BitmapFactory.Options();
                //                  bfo.inPreferredConfig = Bitmap.Config.ARGB_8888;
                //                  Bitmap bitmap = BitmapFactory.decodeStream(fileStream, null, bfo);

                Bitmap bitmap = BitmapFactory.decodeStream(fileStream);
                // Convert bitmap to Base64 encoded image for web
                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

                // to get image extension file name split the received
                int fileExtensionPosition = imageName.lastIndexOf('.');
                String fileExtension = imageName.substring(fileExtensionPosition+1);
                //                  Log.d(IConstants.TAG,"fileExtension: " + fileExtension);

                if(fileExtension.equalsIgnoreCase("png")){
                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
                    //                      Log.d(IConstants.TAG,"fileExtension is PNG");
                }else if(fileExtension.equalsIgnoreCase("jpg") || fileExtension.equalsIgnoreCase("jpeg")){
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
                    //                      Log.d(TAG,"fileExtension is JPG");
                }

                byte[] byteArray = byteArrayOutputStream.toByteArray();
                String imgageBase64 = Base64.encodeToString(byteArray, Base64.DEFAULT);
                encodedImageBase64 = "data:image/png;base64," + imgageBase64;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return encodedImageBase64="";
        }
        finally {
            //Always clear and close
            try {
                if(fileStream != null) {
                    fileStream.close();
                    fileStream = null;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

//      Log.d(TAG,"encodedImageBase64: " + encodedImageBase64);
        return encodedImageBase64;
    }
1