У меня есть изображение, которое было масштабировано для соответствия. Из масштабированного изображения пользователь выбирает прямоугольник.
Затем я повторно рисую на основе этого выбора:
gc.drawImage(imageDisplayed, minX, minY, width, height, imageDisplayed.getBounds().x, imageDisplayed.getBounds().y, imageDisplayed.getBounds().width, imageDisplayed.getBounds().height );
Итак, теперь я хочу получить исходную координату из масштабированного и увеличенного изображения. Это правильно?:
public Coordinate GetScaledXYCoordinate(int oldX, int oldY, int width, int height, int scaledWidth, int scaledHeight)
{
int newX = (int)(oldX * width)/scaledWidth;
int newY = (int)(oldY * height)/scaledHeight;
Coordinate retXY = new Coordinate(newX, newY);
return retXY;
}
public Coordinate GetZoomedXYCoordinate(int oldX, int oldY, int startX, int endX, int startY, int endY,
int width, int height,int scaledWidth, int scaledHeight)
{
// First get x,y after scaling
Coordinate xy = GetScaledXYCoordinate(oldX, oldY, width, height, scaledWidth, scaledHeight);
// Now get x.y after zooming
int minX = Math.min(startX, endX);
int minY = Math.min(startY, endY);
int maxX = Math.max(startX, endX);
int maxY = Math.max(startY, endY);
int rectWidth = maxX - minX;
int rectHeight = maxY - minY;
return GetScaledXYCoordinate(xy.getX(), xy.getY(), width, height, scaledWidth, scaledHeight);
}
Примечание.. Мне нужен алгоритм, который будет работать для многих масштабирования, а не только для одного масштабирования.
Update:
В идеале, мне нужна функция, которая принимает экранную точку X, Y и возвращает исходное изображение X, Y. Функция все равно вернет правильные X, Y после масштабирования и масштабирования.