#android #image #bitmap #rotation
Вопрос:
Я хочу сделать пользовательскую обрезку изображений для Android, которая поддерживает вращение. Кроппер отлично работает. Проблема, с которой я сталкиваюсь при вращении изображения (растрового изображения с использованием матрицы вращения), область наложения обрезки также должна быть повернута соответствующим образом. Для этого я повернул точки формы обрезки, применив другую матрицу поворота. Он отображает точки формы обрезки (в частности, ограничивающую рамку, на которую указывает другой цветной круг на изображении). Матрица вращения применяется для формы урожая вращение применяется с центром формы урожая в качестве источника. Но после поворота формы обрезки точки формы должны быть переведены, чтобы сохранить то же положение и соотношение сторон. Может ли кто-нибудь помочь мне, пожалуйста, достичь этого? [ Я делюсь некоторым фрагментом кода для поворота растрового изображения и обрезки точек формы
private Bitmap rotateBitmap(Bitmap source, float angle) {
Matrix matrix = new Matrix();
matrix.postRotate(angle);
Bitmap rotatedBitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
rotateShapePoints(angle);
return rotatedBitmap;
}
Rotate Shape Points
private void rotateShapePoints(float angle)
{
PointF centerPoint = getCropShapeView().getCenterPoint(); // return the center of the shape
Matrix matrix = new Matrix();
matrix.postRotate(angle,centerPoint.x,centerPoint.y);
HashMap<Integer,PointF> points = (HashMap<Integer, PointF>) getCropShapeView().getPoints(); // map is used to track the point at different position
for(Map.Entry<Integer,PointF> entry : points.entrySet())
{
int key = entry.getKey();
PointF value = entry.getValue();
float[] pointArray = new float[] { value.x,value.y};
matrix.mapPoints(pointArray);
PointF rotatedPoint = new PointF(Math.abs(pointArray[0]),Math.abs(pointArray[1]));
points.put(key,rotatedPoint);
}
getCropShapeView().setPoints(points);
getCropShapeView().invalidate();
}