带矩阵的 DrawBitmap 不准确
DrawBitmap with Matrix not Accurate
我正在尝试使用 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 位置处为原始大小。
预期结果是图像为一半大小并位于 canvas.
的中心
注意:我正在使用 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);
现在你应该可以继续了,这应该会给你正确的输出
我正在尝试使用 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 位置处为原始大小。
预期结果是图像为一半大小并位于 canvas.
的中心
注意:我正在使用 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);
现在你应该可以继续了,这应该会给你正确的输出