如何解决矩阵不正确的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);
现在您应该可以继续进行,这应该可以为您提供正确的输出
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。