ImageView Android 内存

发布于 2024-10-23 14:38:53 字数 1014 浏览 1 评论 0原文

我原来的问题的后续内容。

有没有一种方法可以在 Android 应用程序中使用 ImageViews 而不使用大量 RAM?

在原来的 问题 中,我发现我的应用程序使用了大量 RAM,并发现它是我也使用了所有 RAM 的 ImageView。

为了获取我使用的图像,

public void addPictureOnClick(View view){
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"),1);
    } 

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == 1) {
            // currImageURI is the global variable I'm using to hold the content:// URI of the image
            Uri currImageURI = data.getData();                
            image.setImageURI(currImageURI);
        }

我想知道是否有其他方法来显示图片而不是 URI?

A followup from my original question.

Is there a way to use ImageViews in android apps without using a lot of RAM?

In the original question I found that my app used a lot of RAM, and found that it was the ImageViews which I used that too up all the RAM.

To get the Image I use

public void addPictureOnClick(View view){
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"),1);
    } 

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == 1) {
            // currImageURI is the global variable I'm using to hold the content:// URI of the image
            Uri currImageURI = data.getData();                
            image.setImageURI(currImageURI);
        }

I would like to know if there is another way to show pictures rather than the URI?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

檐上三寸雪 2024-10-30 14:38:53

您可以缩放图片:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
imageViewFIeld.setImageBitmap(BitmapFactory.decodeByteArray(image, 0, image.length, options));

如果图像较大,缩放过程可能会更长,但显示时的内存负载会较低。

编辑:inSampleSize 值增加得越多,花费的时间就越多,内存使用量就越少。

inSampleSize 文档:如果设置
到一个值> 1、请求解码器
对原始图像进行二次采样,
返回较小的图像进行保存
记忆。样本量是数量
任一维度的像素数
对应于单个像素
解码的位图。例如,
inSampleSize == 4 返回图像
即宽度/高度的 1/4
原来的,和1/16的数量
像素。任何值 <= 1 都被视为
与1相同。注意:解码器将尝试
来满足这个要求,但是
结果位图可能有不同的
尺寸正是有
被要求。另外,2 的幂是
解码器通常更快/更容易
荣誉。

http://developer.android.com/reference/android/graphics /BitmapFactory.Options.html#inSampleSize

You can scale your pictures :

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
imageViewFIeld.setImageBitmap(BitmapFactory.decodeByteArray(image, 0, image.length, options));

The scaling process could be longer if you have big images, but the memory load will be lower on display.

Edit: More you increase the inSampleSize value, more times it take, less memory usage you will have.

inSampleSize documentation : If set
to a value > 1, requests the decoder
to subsample the original image,
returning a smaller image to save
memory. The sample size is the number
of pixels in either dimension that
correspond to a single pixel in the
decoded bitmap. For example,
inSampleSize == 4 returns an image
that is 1/4 the width/height of the
original, and 1/16 the number of
pixels. Any value <= 1 is treated the
same as 1. Note: the decoder will try
to fulfill this request, but the
resulting bitmap may have different
dimensions that precisely what has
been requested. Also, powers of 2 are
often faster/easier for the decoder to
honor.

http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文