矩阵不正确的DrawBitmap

问题描述

我正在尝试使用Canvas.drawBitmap(...)Bitmaps绘制到Canvas上,但是它的位置或大小不正确。

以下是我如何实现此目标的示例:

Canvas canvas = new Canvas();
Matrix matrix = new Matrix();

/// scale = 0.5
/// image.getX() = 250
/// image.getY() = 250
matrix.setTranslate(
        imageView.getX() * scale,imageView.getY() * scale
);

matrix.setScale(
        scale,scale
);

matrix.postRotate(imageView.getRotation(),imageView.getX() * scale,imageView.getY() * scale);

canvas.drawBitmap(bitmap,matrix,null);

我得到的结果是图像在0x0位置处于原始大小。
预期结果是将图像缩小一半并位于画布的中心。

注意:我使用matrix.postRotate(...)绘制旋转到与ImageView相同角度的位图。

解决方法

您能试一下吗,我试图解释注释中的逻辑:

// as you wanted Half size so reduced width and height to half

  Bitmap dstBitmap = Bitmap.createScaledBitmap(srcbitmap,(srcbitmap.getWidth()/2 ),(srcbitmap.getHeight()/2),true);

                // Here I calculate screen size
                DisplayMetrics displayMetrics = new DisplayMetrics();
                getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
                int height = displayMetrics.heightPixels;
                int width = displayMetrics.widthPixels;

   //Create screen size bitmap to position image at center easily
                Bitmap bitmap = Bitmap.createBitmap(
                        width,height,Bitmap.Config.ARGB_8888 
                );

                // Initialize a new Canvas  with above bitmap
                Canvas canvas = new Canvas(bitmap);


             
           Matrix matrix = new Matrix();


            // Rotating about center of image
            matrix.setRotate(
                    45,// your angle
                    dstBitmap.getWidth() / 2,dstBitmap.getHeight() / 2 
            );

  
            matrix.postTranslate(
                    (width  - dstBitmap.getWidth()) / 2,(height - dstBitmap.getHeight() )/ 2
            );

           

            canvas.drawBitmap(dstBitmap,matrix,null);

现在您应该可以继续进行,这应该可以为您提供正确的输出

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...