首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bitmapfactory示例

Bitmapfactory示例
EN

Stack Overflow用户
提问于 2012-06-25 10:00:58
回答 1查看 45.9K关注 0票数 4

我想创建一个动态图像视图,其中我的图库中的每个图像都将使用位图工厂,而不是绑定在图像视图中的可绘制图像。有没有一些网站有这方面的bitmapfactory教程?我相信使用位图工厂使用更少的内存,将图像绑定到图像视图?是这样的吗?我还希望最小化内存泄漏的风险,这就是我想使用bitmapfactory的原因。请帮帮忙。我找不到教授bitmapfactory的基本示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-25 10:27:38

生成位图对象

1)从文件

使用带有push选项的adb工具将test2.png复制到SD卡上

这是从SD卡加载位图的最简单方法。只需将图像的路径传递给BitmapFactory.decodeFile(),然后让Android SDK完成剩下的工作。

代码语言:javascript
复制
public class TestImages extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView image = (ImageView) findViewById(R.id.test_image);
        Bitmap bMap = BitmapFactory.decodeFile("/sdcard/test2.png");
        image.setImageBitmap(bMap);
    }
}

这段代码所做的一切就是加载我们之前复制到sdcard的图像test2.png。BitmapFactory使用该图像创建一个位图对象,我们使用ImageView.setImageBitmap()方法来更新ImageView组件。

2)来自输入流

使用BitmapFactory.decodeStream()将BufferedInputStream转换为位图对象。

代码语言:javascript
复制
public class TestImages extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView image = (ImageView) findViewById(R.id.test_image);
        FileInputStream in;
        BufferedInputStream buf;
        try {
            in = new FileInputStream("/sdcard/test2.png");
            buf = new BufferedInputStream(in);
            Bitmap bMap = BitmapFactory.decodeStream(buf);
            image.setImageBitmap(bMap);
            if (in != null) {
            in.close();
            }
            if (buf != null) {
            buf.close();
            }
        } catch (Exception e) {
            Log.e("Error reading file", e.toString());
        }
    }
}

这段代码使用基本的Java FileInputStream和BufferedInputStream为BitmapFactory.decodeStream()创建输入流。文件访问代码应该包含在try/catch块中,以捕获FileInputStream或BufferedInputStream抛出的任何异常。另外,当你处理完流句柄时,它们应该被关闭。

3)来自你的Android项目的资源

使用BitmapFactory.decodeResource(res, id)从Android资源获取位图。

代码语言:javascript
复制
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ImageView image = (ImageView) findViewById(R.id.test_image);
    Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
    image.setImageBitmap(bMap);
}
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11182714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档