Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 下采样后图像看起来模糊_Android_Image Processing_Bitmap - Fatal编程技术网

Android 下采样后图像看起来模糊

Android 下采样后图像看起来模糊,android,image-processing,bitmap,Android,Image Processing,Bitmap,我正在开发一个小项目,它具有缩放功能,但当我缩小图像时,它的质量会降低,以保持其原始质量,我使用了以下代码进行图像降采样,但当我缩小图像时,它看起来模糊(看起来呆滞),并且缩小需要大量时间,我需要快速缩小,请帮助我更正我的代码。提前谢谢 Bitmap downscaleBitmap_new(Bitmap src,int targetWidth, int targetHeight, int off) { float r = (src.getWidth()-off)/(float)tar

我正在开发一个小项目,它具有缩放功能,但当我缩小图像时,它的质量会降低,以保持其原始质量,我使用了以下代码进行图像降采样,但当我缩小图像时,它看起来模糊(看起来呆滞),并且缩小需要大量时间,我需要快速缩小,请帮助我更正我的代码。提前谢谢

Bitmap downscaleBitmap_new(Bitmap src,int targetWidth, int targetHeight, int off)
 {
     float r = (src.getWidth()-off)/(float)targetWidth;
     float s = (src.getHeight()-off)/(float)targetHeight;
     Bitmap target = Bitmap.createBitmap(Math.round(src.getWidth()/r), Math.round(src.getHeight()/s), Config.ARGB_8888);
     r = src.getWidth()/(float)target.getWidth();
     s = src.getHeight()/(float)target.getHeight();
     int argb;
     int red;
     int green;
     int blue;
     int alpha;
     float wx;
     float wy;
     float n;
     for(int i=0;i<target.getWidth();++i){
         for(int j=0;j<target.getHeight();++j){
             red = 0;
             green = 0;
             blue = 0;
             alpha = 0;
             n=0;
             for(int k =(int)(i*r);k<Math.round((i+1)*r);++k){
                 if(k<i*r){
                     wx = k-i*r+1;
                 }else{
                     if(k+1>(i+1)*r)
                         wx = (i+1)*r-k;
                     else
                         wx = 1;
                 }
                 for(int l=(int)(j*s);l<Math.round((j+1)*s);++l){
                     if(l<j*s){
                         wy = l-j*s+1;
                     }else{
                         if(l+1>(j+1)*s)
                             wy = (j+1)*s-l;
                         else
                             wy = 1;
                     }
                     n+=wy*wx;
                     argb=src.getPixel(k, l);
                     red += wx*wy*Color.red(argb);
                     green += wx*wy*Color.green(argb);
                     blue += wx*wy*Color.blue(argb);
                     alpha += wx*wy*Color.alpha(argb);

                 }
             }
             target.setPixel(i, j, Color.argb((int)(alpha/n), (int)(red/n), (int)(green/n), (int)(blue/n)));
         }
     }
     return target;
 }
位图缩小位图\u新建(位图src、int targetWidth、int targetHeight、int off)
{
float r=(src.getWidth()-off)/(float)targetWidth;
float s=(src.getHeight()-off)/(float)targetHeight;
Bitmap target=Bitmap.createBitmap(Math.round(src.getWidth()/r)、Math.round(src.getHeight()/s)、Config.ARGB_8888);
r=src.getWidth()/(float)target.getWidth();
s=src.getHeight()/(float)target.getHeight();
int-argb;
红色;
绿色;
蓝色;
int-alpha;
浮动wx;
浮动wy;
浮动n;

对于(int i=0;i为什么您认为缩小图像比例不会改变其质量?由于插值,您将获得较差的质量。无法保持图像质量。为了获得更好的输出,您可以使用三次插值或双线性插值,而不是线性插值

Bitmap.createScaledBitmap(src,新宽度,新高度,true);


这将使用双线性过滤器,您将获得很好的结果。如果您希望获得更好的性能,您可能希望签出renderscript并实现更好的算法。您也可以使用第三方库,如OpenCV或其他图像处理库,但这将对应用程序造成很大负担。

感谢您的回答。.实际上我使用了createS当我缩小图像时,caledBitmap的质量会非常差。当缩小结束时,我需要应用图像过滤器。请分享一些第三方库、OpenCV或RenderScript的链接。只是一个想法,当你缩小时,你可以缩小画布/图像视图的大小,并渲染位图。我想android会注意质量。