如何在Android中缩小位图大小而不损失分辨率?

3

我有一个应用程序,它从相机中拍摄照片,然后在该照片上执行一些图像处理操作。但这需要太长时间,因此我想在图像处理操作之前减小位图的大小。重要的是,较小的图像分辨率也必须良好。在Android中是否有库或是否有人知道该操作的算法?


你想要减小整张图片的尺寸,还是只想取其中一小部分并保持其原始大小? - Mark Ransom
@markransom 是的,我想要减小整张图片的尺寸。 - barzos
你需要的是某种无损压缩方式 - 图像文件格式是什么?如果它们是位图,则将它们保存为高质量的JPEG格式可以大大减小文件大小。或者你可以尝试在它们上运行像 pngcrush 这样的库。 - Joseph Earl
@josephearl 文件格式是jpg,但为了进行一些图像处理操作,我在Android中将其转换为位图。这个位图的尺寸为17001400。正如您所看到的,它太大了,因此我想在图像处理操作之前将其大小减小到800600左右,那么我该怎么做呢? - barzos
1
最简单的方法就是使用BitmapFactory.decodeFile和一个BitmapFactory.Options,其中inSampleSize为2 - 这将导致您获得的图像为850*700(即宽度和高度减半,内存使用量减少四分之一)。 - Joseph Earl
@josephearl 谢谢,它有效。我得到了160*150的图像,但分辨率怎么样呢?我看不到新的小图片,所以当我们缩小图片时,分辨率会变成低质量还是保持不变? - barzos
2个回答

1
一种方法是取每个n*n块的平均值并将其转换为单个像素。这不是绝对最锐利的方法,也不会完全没有伪影,但我认为你会发现实际结果是可以接受的 - 而且速度非常快。

这个操作会不会损坏图像的形状? - barzos
1
@barzos,形状将保持不变,但细节将被减少。 - Mark Ransom
@Ashishsingh,抱歉我不精通Android或Java,所以我很可能会搞砸它。但如果您对图像具有像素级别的访问权限,那么这个概念非常简单。 - Mark Ransom

0
    { Bitmap bit=Shrinkmethod(arrpath1[position], 100, 100); 
       //This reduce the size of image in 1kb size so u can also consider VM nativeheap memory

                    iv.setImageBitmap(bit);//ImageView Obj.

    }


    //To reduce the byte size of image in program

//user defined method to reduce size of image without reducing the quality of img.
        Bitmap Shrinkmethod(String file,int width,int height){
            BitmapFactory.Options bitopt=new BitmapFactory.Options();
            bitopt.inJustDecodeBounds=true;
            Bitmap bit=BitmapFactory.decodeFile(file, bitopt);

            int h=(int) Math.ceil(bitopt.outHeight/(float)height);
            int w=(int) Math.ceil(bitopt.outWidth/(float)width);

            if(h>1 || w>1){
                if(h>w){
                    bitopt.inSampleSize=h;

                }else{
                    bitopt.inSampleSize=w;
                }
            }
            bitopt.inJustDecodeBounds=false;
            bit=BitmapFactory.decodeFile(file, bitopt);



            return bit;

        }

//Try to upload ur project code and idea so that like u and me can get that to develop more android application..

Regard,
pranav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接