0

几天来,我一直在这里和互联网上寻找许多帖子的解决方案,以解决我加载或移动大型 jpg 图像(现在已定位为可绘制资源)的问题,我认为是时候问问自己了altought有许多非常相关的问题和解决方案。

我正在使用 OpenGL 开发 3D 地形模拟,问题是我正在使用一个非常大的 jpg 图像(2048x2048 = 1,94 MB)作为地形纹理。

让我们看一下我做过的一些解决方法:

第一个:

Bitmap terrainBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.terrain, options);

这个立即崩溃,可能是因为图像太大

第二:

Uri path = Uri.parse("android.resource://com.jgc.my_app/" + R.drawable.terrain);
URL ulrn;ulrn = new URL(path.getPath());
HttpURLConnection con = (HttpURLConnection)ulrn.openConnection();
InputStream is = con.getInputStream();
Bitmap bmp = BitmapFactory.decodeStream(is);

那可能是一次非常愚蠢的尝试

第三:

Bitmap terrainBitmap = BitmapFactory.decodeFile("android.resource://com.jgc.my_app/terrain.jpg", options);

但结果我得到了一个非常令人沮丧的空位图......

考虑到的其他解决方法是,由于可绘制资源在应用程序“内部”,为什么不将它们移动到 sd 卡并在那里解码文件,但是,将位图或可绘制资源移动到我已经提供的 sdcard 的解决方案总是找到用户 BitmapFactory.decodeResource(getResources(), R.drawable.terrain, options);

我很感激任何建议,从那时起我将在我的项目中处理其他任务。

提前致谢

4

1 回答 1

0

好的,也许我很幸运,这是对我有用的 n 工作方法:

private static BitmapFactory.Options terrainBitmapOptions = new BitmapFactory.Options();

...

// Set our bitmaps to 16-bit, 565 format.
    terrainBitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565;

...

InputStream is = getResources().openRawResource(R.drawable.terrain);
Bitmap terrainBitmap;
try {
    terrainBitmap = BitmapFactory.decodeStream(is, null, terrainBitmapOptions);
} finally {
    try {
        is.close();
        } catch (IOException e) {
        // Ignore.
    }
}

我希望它可以帮助其他人......

于 2012-11-22T12:06:23.627 回答