【问题标题】:Create a PNG Resource dynamically动态创建 PNG 资源
【发布时间】:2012-03-22 20:17:38
【问题描述】:

我正在 Android 中尝试从我的服务器发送的 XML 文件中获取资源。它直接向我发送 Base64 格式的 PNG 文件。

像这样:

lgrbehzlgrbezgbrhezugizgbrzbgre

我的问题是:

有没有一种方法可以使用从我的服务器发送的 PNG 数据作为“R.drawable.MyNewResource”中的资源?

或者我可以从我的应用程序数据文件夹中的 PNG 文件设置 ImageResoure 吗?

提前致谢!

【问题讨论】:

    标签: android dynamic resources png


    【解决方案1】:

    好的,你的问题不正确,如果我没有错,那么你想要类似的东西,

    只需转换您的网络响应base64 png string into bitmap,然后使用该位图在 imageview 中进行设置。

    Bitmap bitmap;          
    ImageView imgView;
    byte[] decodedString;       
    
    decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
    bitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
    imgView.setImageBitmap(bitmap);
    

    【讨论】:

    • 抱歉忘了提,encodedImage是一个字符串字段,其中包含.png文件的base64字符串。
    • 感谢您的回答,但似乎我的 png 文件不是由位图工厂正确创建的。 mHeight 和 mWidth 都等于“-1”,你有什么线索吗?
    • 好吧,我的错,这是因为 Base64 类型的错误(在我的情况下是 NO_WRAP 而不是 DEFAULT)
    【解决方案2】:

    您可以使用此代码创建文件并将位图写入文件。

    File file = new File(imageDirectory,image_name);
    OutputStream outStream = null;
    try {
        outStream = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
        outStream.flush();
        outStream.close();
    
        Toast.makeText(cameraActivity.this, "Saved", Toast.LENGTH_LONG).show();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Toast.makeText(cameraActivity.this, e.toString(), Toast.LENGTH_LONG).show();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Toast.makeText(cameraActivity.this, e.toString(), Toast.LENGTH_LONG).show();
    }
    

    位图将保存在应用程序文件中,然后您可以读取它。

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 2017-11-05
      • 1970-01-01
      相关资源
      最近更新 更多