Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2021, 13:58   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Координаты клика на изображение

Итак, есть Image, у которого активировано свойство Proportional
И в него загружено изображение.

Image имеет квадратную форму (Height=Width)
А вот загруженное изображение может быть любых размеров и пропорций сторон

При нажатии на изображения в OnMouseDown попадают координаты на объекте Image, но не координаты на самом изображении. А нужно получить координаты на самом изображении

Я создал для себя ниже описанную функцию, с помощью которой я перевожу одни координаты в другие.
Код:
x1:=trunc(X*KvPrImageKoeff(Image1) );
y1:=trunc(Y*KvPrImageKoeff(Image1) );
Код:
Function KvPrImageKoeff(Im: TImage):real;
begin
  If (Im.Height<Im.Picture.Height) or (Im.Width<Im.Picture.Width) then begin
    If Im.Picture.Height>Im.Picture.Width then begin
      Result:=Im.Picture.Height/Im.Height;
    End else begin
      Result:=Im.Picture.Width/Im.Width;
    End;
  end else Result:=1;
end;
ВОПРОС: а надо ли вообще городить весь этот огород? Или есть более прямой способ получить координаты?
Kronos913 вне форума Ответить с цитированием
Старый 22.12.2021, 19:18   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Зная ширину и высоту изображения до его масштабирования, можно пересчитать экранные координаты в те, что были на исходном изображении. Другого пути тут нет.
Arigato вне форума Ответить с цитированием
Старый 22.12.2021, 20:47   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
else Result:=1;
А чего без растяжения, если исходное изображение меньше image?
Код:
zoom := Max(Image1.Picture.Height / Image1.Height, Image1.Picture.Width / Image1.Width);
x1 := Trunc(X * zoom);
y1 := Trunc(Y * zoom);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.12.2021, 21:21   #4
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
А чего без растяжения, если исходное изображение меньше image?
Если исходное меньше, то оно просто будет собрано в угол к 1:1
Kronos913 вне форума Ответить с цитированием
Старый 22.12.2021, 21:42   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
то оно просто будет собрано в угол к 1:1
И правда.
Код:
zoom := Max(Max(Image1.Picture.Height / Image1.Height, Image1.Picture.Width / Image1.Width), 1);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как пересчитать координаты точки диаграммы в координаты экрана. alex77755 Microsoft Office Excel 3 19.05.2017 13:32
Даны координаты трёх точек, являющихся вершинами некоторого параллелограмма. Найти координаты четвертой вершины. yamato_pm Паскаль, Turbo Pascal, PascalABC.NET 1 18.12.2013 19:42
Как правильно расположить изображение на веб-странице, задав его координаты в CSS? Michael_Ardan HTML и CSS 2 07.02.2013 19:07
Определение длины пути от клика до клика - как??? Enya Помощь студентам 0 11.05.2009 12:54
Координаты клика snake-as JavaScript, Ajax 0 24.02.2008 15:44