关于Android读取不同位置(drawable,asset,SDCard)的图片资源的总结

方式一:

      已将图片保存到drawable目录下,通过图片id获得Drawable或者Bitmap,此方式最常用。(若只知道图片的名称,还可以通过图片的名称获得图片的id)

(1)通过图片id获得Drawable

       Drawable drawable=getResource().getDrawable(R.drawable.xxx);

(2)通过图片id获得Bitmap

       Resource res=gerResource();

       Bitmap bitmap=BitmapFactory.decodeResource(res, id);

(3)通过图片的名称获得图片的id(两种方法)

方法1:   int id =res.getIdentifier(name, defType, defPackage); //name:图片的名,defType:资源类型(drawable,string。。。),defPackage:工程的包名

方法2:

// 用反射机制来获取资源中的图片ID和尺
Field[] fields = R.drawable.class.getDeclaredFields();
      List<Integer> imgList = new ArrayList<Integer>();
        for (Field field : fields) {         
         if (!"ic_launcher".equals(field.getName())) {        
           try {             
                int index = field.getInt(R.drawable.class);            
                imgList.add(index);           
                int size[] = new int[2];           
                Bitmap bitmap = BitmapFactory.decodeResource(getResources(), index);          
                size[0] = bitmap.getWidth();        
                size[1] = bitmap.getHeight();             
                imgSize.add(size);
           } catch (IllegalArgumentException e) {
                 e.printStackTrace();
              } catch (IllegalAccessException e) {
                 e.printStackTrace();
              }
           }
方式二:
     已将图片保存到assest目录下,知道图片的名称,通过inputstream获得图片Drawabl 或者 Bitmap

	   AssetManager asm=getAssetMg();

	   InputStream is=asm.open(name);//name:图片的名称

  (1)获得Drawable
		Drawable da = Drawable.createFromStream(is, null);

   (2)获得Bitmap
		Bitmap bitmap=BitmapFactory.decodeStream(is);

方式三:图片保存在sdcard,通过图片的路径h

		/图片路径
		String imgFilePath = Environment.getExternalStorageDirectory().toString()
		+ “/DCIM/device.png”;

	(1)文件输入流

		public Bitmap getBitmapFromSd(String  imgFilePath) {

		FileInputStream fis = null;

		try {

			fis = new FileInputStream(new File(imgFilePath));//文件输入流

			Bitmap bmp = BitmapFactory.decodeStream(fis);

			Log.d(“sss”, bmp + “”);

			return bmp;

		} catch (FileNotFoundException e) {

		    e.printStackTrace();

		}finally{

		try {
            if(fis!=null){
            fis.close();
           }
       } catch (IOException e) {
            e.printStackTrace();
           }
        }
      }

  (2)随机读写文件流

		RandomAccessFile raf;

		File imgfile = new File(path);

		try {
			   raf = new RandomAccessFile(imgfile, “r”);//以读的方式读取文件流
			}

		catch (IOException ex) {

			e.printStackTrace();

		} finally{

		try {

			if(fis!=null){

			  fis.close();

			}
		} catch (IOException e) {

			e.printStackTrace();
			}
		 }
		}
			data= new byte[1024];
			try {
			mMiniThumbFile.seek(0);
			int got = mMiniThumbFile.read(data, 0, 1024);
			} catch (IOException e) {
			e.printStackTrace();
			}
			if (data != null) {
			//通过data获得bitmap
			Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
		  }
		}

建议使用随机读写文件流,可以防止读取的文件流过大而导致内存溢出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值