【问题标题】:Get Texture from google play game services Icon Uri in Libgdx从 Libgdx 中的 google play 游戏服务 Icon Uri 获取纹理
【发布时间】:2017-09-16 09:29:14
【问题描述】:

我正在尝试在 libgdx 的游戏中显示用户配置文件图标。在代码的 android 端,我可以使用 mParticipants.get(i).getIconImageUri() 获取播放器的图像 uri,这给了我 Uri。但是我找不到将 Uri 转换为 Texture 的方法,我可以在我的 libgdx 代码中使用它。

我首先尝试使用代码从 Uri 获取位图

Bitmap bitmap = null;
    try {
        InputStream inputStream = application.getContentResolver().openInputStream(imgUri);
        bitmap = BitmapFactory.decodeStream(inputStream);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

但这给了我一个安全错误。

google 上的其他答案向我展示了方法,所有这些都包括在 Android ImageView 中显示图像的方法,但我需要一个可以在我的 libgdx 游戏中使用的纹理来显示图像

我也尝试向我的清单添加以下权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

即便如此,我仍然遇到安全错误。请帮我解决这个问题

【问题讨论】:

  • 安全异常可能是由于您使用的是 targetSDK >=23,这需要 Dangerous Permissions 的运行时权限。
  • 位图 ??您如何在核心模块中使用,可能您可以通过与核心模块的接口从android获取String,然后从链接地址获取纹理数据,然后将数据保存在本地fileHandler中并从本地文件中获取该数据并填充到您的项目中。跨度>
  • @AbhishekAryan 位图可以轻松转换为 libgdx 纹理,然后可以在核心模块中用作 ** new Texture(bitmap.getWidth(), bitmap.getHeight(), Pixmap.Format.RGBA8888) ** 用于获取 http url 的方法已弃用
  • 你觉得这个new Texture(bitmap.getWidth(), bitmap.getHeight(), Pixmap.Format.RGBA8888)怎么样,你正在将Bitmap转换成Texture。我不这么认为:)

标签: java android opengl-es libgdx google-play-games


【解决方案1】:

经过大量研究,在我看来,不可能通过读取 Uri 的输入流来获取位图。唯一的方法是使用ImageManager

实现这一点的示例代码是:

private void SetUserIconForPlayer(final Player player, Uri uri)
{
    ImageManager mgr = ImageManager.create(application);
    mgr.loadImage(new ImageManager.OnImageLoadedListener() {
        @Override
        public void onImageLoaded(Uri uri,final Drawable drawable, boolean isRequestedDrawable) {
            if(isRequestedDrawable)
            {
                Gdx.app.postRunnable(new Runnable() {
                    @Override
                    public void run() {
                        player.SetUserIcon(GetTextureFromDrawable(drawable));
                    }
                });
            }
        }
    }, uri);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 2016-01-04
    • 2015-05-08
    • 1970-01-01
    • 2014-04-16
    • 2014-02-02
    相关资源
    最近更新 更多