如何从资产中加载图片?

我需要从资产加载图像,以避免在某些特定情况下调整POT图像大小froyo 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) { } } 

但我得到NullPointerException is.close();

我捕获一个FileNotFoundException:radiocd5.png,但该文件是在我的资产目录:S

我在做什么坏事? 该文件名为radiocd5.png ,位于assets目录中

Solutions Collecting From Web of "如何从资产中加载图片?"

你可以按照我的教程来显示资产的数据: https : //xjaphx.wordpress.com/2011/10/02/store-and-use-files-in-assets/
加载图像和文本的示例显示。

我现在添加了提供的链接的相关部分(如遇地震等);-)泰丰

 // 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; } 

而不是使用资产目录,将文件放入/ res / raw,然后可以使用以下URI访问它: android.resource://com.your.packagename/" + R.raw.radiocd5

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