How to load a image from assets?

前端 未结 6 833
傲寒
傲寒 2020-11-29 06:28

i need to load a image from assets to avoid a froyo 2.2.2 bug resizing POT images in some particular cases. The way to avoid it is loading the image files from assets dir.

相关标签:
6条回答
  • 2020-11-29 06:43
    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();
    }
    
    0 讨论(0)
  • 2020-11-29 06:44

    You can follow my tutorials on displaying data from Assets: https://xjaphx.wordpress.com/2011/10/02/store-and-use-files-in-assets/
    The sample with loading image and text to display.

    I now added the relevant part of the provided link (in case of earthquake or something) ;-) 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;
    }
    
    0 讨论(0)
  • 2020-11-29 06:47

    Another version, inside a fragment:

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    { root = inflater.inflate(R.layout.createrestaurant_layout, container, false);
      Resources res = getResources();
      img = (ImageView) root.findViewById(R.id.img);
      AssetManager amanager = res.getAssets();
      try {
          InputStream imageStream = amanager.open("restaurant.jpg");
          Drawable drawable = new BitmapDrawable(res, imageStream);
          img.setImageDrawable(drawable);
      }  catch (Exception e) { e.printStackTrace(); }
    } 
    

    This process seems much simpler in iOS/UIKit or iOS/SwiftUI.

    0 讨论(0)
  • 2020-11-29 06:49
        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;
        }
    
    0 讨论(0)
  • 2020-11-29 06:57

    Instead of using the assets dir, put the file into /res/raw, and you can then access it using the following URI: android.resource://com.your.packagename/" + R.raw.radiocd5

    0 讨论(0)
  • 2020-11-29 07:05

    Here is an alternative way

    setImageBitmap(BitmapFactory.decodeStream(assets.open("photo.jpg")))
    
    0 讨论(0)
提交回复
热议问题