problems with big drawable jpg image

冷暖自知 提交于 2020-01-16 19:45:07

问题


during a couple of days i've been looking here and on the Internet in many post for a solution on an issue im having loading or moving a large jpg image (located as a drawable reource by now) and I think it's time to ask myself altought there are many questions and solutions very related.

I'm developing a 3D terrain simulation with OpenGL and the problem is that I'm using as terrain texture a quite large jpg image ( 2048x2048 = 1,94 MB ).

Let's look at some workarround I Did:

1st:

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

This one crashes inmediately, probably because the image is too big

2nd:

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

that one probably was a quite silly attempt

3rd:

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

but I'm getting a very frustrating null bitmap as result...

Other workarrounds in mind are, as the drawable resources are "inside" the application, why not to move them to the sd card and decodefile form there, but, the solutions given to move a bitmap or a drawable to the sdcard that I've found always user BitmapFactory.decodeResource(getResources(), R.drawable.terrain, options);

I appreciate any suggestion, since then I'll be working arround other tasks in my proyect.

Thanks in advance


回答1:


Ok, maybe I've been lucky, here is the n work-arround ind this workd for me:

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.
    }
}

I hope it helps anyone else...



来源:https://stackoverflow.com/questions/13511657/problems-with-big-drawable-jpg-image

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!