gpt4 book ai didi

android - 位图工厂示例

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:41 25 4
gpt4 key购买 nike

我想创建一个动态 ImageView ,其中我画廊中的每个图像都将使用位图工厂,而不是 ImageView 中绑定(bind)的图像可绘制对象。有没有一些网站有这方面的位图工厂教程?我相信使用 bitmapfactory 使用更少的内存将图像绑定(bind)到 ImageView 中?这是正确的吗?我还想尽量减少内存泄漏的风险,这就是我想使用位图工厂的原因。请帮忙。我找不到教授 bitmapfactory 的基本示例。

最佳答案

构建位图对象

1) 来自文件

使用带push选项的adb工具将test2.png拷贝到sdcard上

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

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 转换为位图对象。

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 block 包围,以捕获 FileInputStream 或 BufferedInputStream 抛出的任何异常。此外,当您使用完流句柄后,它们应该关闭。

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

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

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

关于android - 位图工厂示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11182714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com