如何获得一个Drawable的文件实例?

9

以下是我处理徽标打印的代码。 徽标放在res / drawable文件夹中。 当我运行应用程序时,它会抛出:

java.io.FileNotFoundException: /android.resource:/com.android.test/2130837505 (No such file or directory).

有什么建议吗?
    public  boolean printLogo()
    {
      Uri logo_path = Uri.parse("android.resource://com.android.test/" + R.drawable._logo);
      File logo = new File(logo_path.toString());
      byte[] logo_bytes = new byte[(int) logo.length()];
      System.out.print("Length:" + logo.length());
      FileInputStream fs;
      try {
          fs = new FileInputStream(logo);
          fs.read(logo_bytes);
          fs.close();
          mChatService.write(logo_bytes);
      } catch (FileNotFoundException e) {
          e.printStackTrace();
      }catch (IOException e) {
          e.printStackTrace();
      }
      return true;
    }

你能解释一下你的问题以及你想要做什么吗? - ρяσѕρєя K
我尝试通过蓝牙连接的打印机打印位图。 mChatService.write(Byte[] b[]) 是执行 OutputStream.write(Byte[] b[]) 的位置。在这种情况下,我需要将位图转换为字节数组。我将位图放置在 res/drawable 文件夹中,并编写了上面的代码,然后我遇到了如我所述的 FileNotFoundException。 - user1437534
看看Dheeresh的答案,我认为这会对你有所帮助。 - ρяσѕρєя K
2个回答

10

是的,你应该将这种类型的资源添加到assets或raw目录下...

但是如果你有任何限制并且只需要字节数组,可以尝试

Bitmap bmp= BitmapFactory.decodeResource(context.getResources(),
                                           R.drawable.icon_resource);

  ByteArrayOutputStream stream = new ByteArrayOutputStream();
  bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
   byte[] byteArray = stream.toByteArray();

这个能够工作了,但是出现了新问题。使用这个字节数组,打印出来的是一些无法阅读、混乱的代码,而不是图像。我想要打印的图像是PNG格式的,我使用的打印机是黑白打印机。你有任何想法吗? - user1437534
就我所见,PNG 是黑白的。 - user1437534
它是PNG格式。颜色只有黑白两种。 - user1437534
它应该能够正常工作..https://dev59.com/UGsz5IYBdhLWcg3w2Llt - Dheeresh Singh

1

首先将您的图像资源放置在assets文件夹下,然后可以使用AssetManager从资源中获取InputStream

AssetManager mgr = context.getAssets(); 
FileInputStream fin = (FileInputStream)mgr.open("path/filename");

路径不应包含资产文件夹。


这里的“文件名”是否包括扩展名,例如“.png”? - user1437534
如果文件夹结构是 assets>images>new.png,那么路径将是 images/new.png - Ron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接