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
Android画布绘制位图功能效率_Android_Image Processing_Canvas_Matrix_Bitmap - Fatal编程技术网

Android画布绘制位图功能效率

Android画布绘制位图功能效率,android,image-processing,canvas,matrix,bitmap,Android,Image Processing,Canvas,Matrix,Bitmap,我正在尝试使用矩阵在画布上显示位图 canvas.drawBitmap(currentBitmap, m_matrix, tempPaint); 但结果是,图像看起来很奇怪。在那之后,我使用边界来展示它 canvas.drawBitmap(currentBitmap, 0, 0, tempPaint); 但这里的图像看起来不错,在这两种情况下,图像都没有缩放 如何设置初始显示的矩阵属性 矩阵显示是否因为图像正在更改而使用其他内容来显示图像 有关详细说明,请推荐任何教程。

我正在尝试使用矩阵在画布上显示位图

      canvas.drawBitmap(currentBitmap, m_matrix, tempPaint);
但结果是,图像看起来很奇怪。在那之后,我使用边界来展示它

     canvas.drawBitmap(currentBitmap, 0, 0, tempPaint);
但这里的图像看起来不错,在这两种情况下,图像都没有缩放

如何设置初始显示的矩阵属性

矩阵显示是否因为图像正在更改而使用其他内容来显示图像


有关详细说明,请推荐任何教程。

您必须使用矩阵。post scale可缩放图像,如下例所示

私有虚矩阵{

矩阵=新矩阵; matrix.postScalecurScale、curScale

 canvas.drawBitmap(currentBitmap, matrix, tempPaint);} 

还没有试过……但应该可以用……

在搜索了很多之后,我终于找到了解决方案,一些与同一问题相关的线程帮助了我

我按照谷歌的教程加载位图,并编写了自己的缩放位图的函数

public static Bitmap scaleDownBitmap(Bitmap original, boolean recycleOriginal, int newmaxWidth , int newmaxHeight){

        if(original == null)
             return null;

        Bitmap rtr= null;
        try{

                int origWidth  = original.getWidth();
                int origHeight = original.getHeight();


                if(origWidth <= newmaxWidth && origHeight <= newmaxWidth){
                        Bitmap b = Bitmap.createBitmap(original);
                        if (recycleOriginal && (original != b))
                            original.recycle();
                    return b;
                }

                int newWidth = 0;
                int newHeight = 0;

                float ratio;

                if(origWidth > origHeight){
                        ratio = (float)origWidth/(float)origHeight;
                        newWidth = newmaxWidth;
                        newHeight = (int)((float)newWidth/ratio);

                } 
                else{
                        ratio = (float)origHeight/(float)origWidth;
                        newHeight = newmaxHeight;
                        newWidth = (int)((float)newHeight/ratio);
                }

                rtr = CreateScaledBitmap(original , newWidth , newHeight);

                if(recycleOriginal && original != rtr)
                        original.recycle();

        }
        catch (Exception e) {
            Log.d("Image Compress Error", e.getMessage());
        }

        return rtr;

 }

     public static Bitmap CreateScaledBitmap(Bitmap paramBitmap, int paramInt1, int paramInt2)
   {
        Bitmap localBitmap = Bitmap.createBitmap(paramInt1, paramInt2, paramBitmap.getConfig());
        Canvas localCanvas = new Canvas(localBitmap);
        localCanvas.setDrawFilter(new PaintFlagsDrawFilter(0, 2));
        localCanvas.drawBitmap(paramBitmap, new Rect(0, 0, paramBitmap.getWidth(), paramBitmap.getHeight()),
                                            new Rect(0, 0, paramInt1, paramInt2), null);
    return localBitmap;
}

我已经尝试过使用matrix.postScale1f、1f或martix.setValues IDENTITY_MATRIX3X3重置位图,但都不起作用。位图最初看起来仍然很奇怪。
tempPaint.setFilterBitmap(true); //Line 1
canvas.drawBitmap(currentBitmap, m_matrix, tempPaint);