В настоящее время я работаю над инструментом обрезки многоточечной связи, и я застрял в течение нескольких дней. Таким образом, в основном, это работает так:Просмотр увеличенного изображения с масштабированным растровым изображением
1) принять большое разрешение фото с камерой устройства
2) поместить полученную битовую карту на экране, используя пользовательский класс (который проходит ImageView)
3) рисовать обработчик над обнаруженные контуры - они позже используются для обрезки большого растрового изображения.
Я хочу осуществить круговой зум при перемещении угловых обработчиков для обеспечения лучшей настройки от пользователя. Это то, что я сделал до сих пор:
@Override
public void setImageBitmap(Bitmap bm) {
originalBitmap = bm.copy(Bitmap.Config.ARGB_8888, true);
shaderPaint = new Paint();
shader = new BitmapShader(originalBitmap, TileMode.CLAMP, TileMode.CLAMP);
shaderPaint.setShader(shader);
shaderMatrix = new Matrix();
....
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
.......
if (zooming) {
shaderMatrix.reset();
inverseMatrix.reset();
if (getImageMatrix().invert(inverseMatrix)) {
float[] pts = new float[2];
pts[0] = currentMovedPoint.x;
pts[1] = currentMovedPoint.y;
inverseMatrix.mapPoints(pts);
shaderMatrix.postTranslate(-pts[0], -pts[1]);
shaderMatrix.postScale(2f, 2f);
shader.setLocalMatrix(shaderMatrix);
canvas.drawCircle(zoomCenterX, zoomCenterY, zoomRadius, shaderPaint);
canvas.drawLine(zoomCenterX - 20, zoomCenterY, zoomCenterX + 20, zoomCenterY, borderPaint);
canvas.drawLine(zoomCenterX, zoomCenterY - 20, zoomCenterX, zoomCenterY + 20, borderPaint);
}
}
zoomCenterX и zoomCenterY фиксированные точки на холсте. Проблема заключается в том, что просмотр масштаба не сосредоточен на координатах currentMovedPoint (он смещен точно с помощью zoomCenterX, zoomCenterY). Если я установил zoomCenterX и zoomCenterY равным 0, изображение масштабирования будет правильно центрировано, но я не смогу использовать его, так как на экране появляется только четверть круга увеличения.
Я пробовал переводить shaderMatrix с помощью zoomCenterX и zoomCenterY без успеха (масштабирование по-прежнему не сосредоточено на выбранной в данный момент точке).
Я иду об этом не так, или есть что-то, что мне не хватает?