Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.31;
Скачать: CL | DM;

Вниз

Как нарисовать квадрат в Image (на увеличеной картинке)   Найти похожие ветки 

 
Писатель   (2012-09-26 21:42) [0]

Задача. Нужно увеличить масштаб картинки (чтобы лучше видеть). И по двум точкам нарисовать в ней квадрат(возможно картинку внутри него отредактировать), и этот квадрат вырезать и сохранить отдельно (причем не в увеличенном виде, а в нормальном).

для этого я на форму положил ScrollBox (чтобы когда изображение становилось больше формы появлялись скролбары), в него TImage.
Затем загружаем картинку:

   TV.Image1.Height := tbmp.Height;
   TV.Image1.Width := tbmp.Width;
   Image1.Canvas.CopyRect(Image1.ClientRect, tbmp.Canvas, Image1.ClientRect);


далее на клик мышкой вешаем увеличение масштаба:
procedure TTv.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; x, y: integer);
begin
 if markSquareMode = true then
 begin
   Image1.Canvas.MoveTo(x-1,y);
   Image1.Canvas.LineTo(x,y)
 end
 else
 begin
   if Button = mbLeft Then
   begin
     Image1.Width := Image1.Width * 2;
     Image1.Height := Image1.Height * 2;
   end;
   if Button = mbRight then
   begin
     Image1.Width := Round(Image1.Width / 2);
     Image1.Height := Round(Image1.Height / 2);
   end;
 end;
end;


а если признак markSquareMode  истина, то по клику мышью пытаемся нарисовать точку (ну для начала хотя бы точку).

Проблема: Если рисуешь на масштабе 100% то все нормально. Если же изображение увеличено, то точка появляется вовсе не там где мы кликаем мышкой. И я никак не могу понять что же с этим делать. Что с этим делать?

Доп. Проблема хотелось бы чтобы при клике мышкой та точка в которую кликаешь (на неувеличеном изображении) не уезжала за пределы экрана, а оставалась примерно в центре экрана.


 
Jeer ©   (2012-09-26 21:57) [1]


> Задача. Нужно увеличить масштаб картинки (чтобы лучше видеть).
>  И по двум точкам нарисовать в ней квадрат(возможно картинку
> внутри него отредактировать), и этот квадрат вырезать и
> сохранить отдельно (причем не в увеличенном виде, а в нормальном).
>


Пошел думать, где я был не прав крайние 30 лет.


 
antonn ©   (2012-09-26 23:35) [2]


> Пошел думать, где я был не прав крайние 30 лет.

не ходи далеко, открой mspaint :)


 
Писатель   (2012-09-26 23:54) [3]

Удалось решить проблему точек

  Image1.Canvas.MoveTo(((x) div Round(Image1.Width/W)),y div Round(Image1.Height/H));
   Image1.Canvas.LineTo((x) div Round(Image1.Width/W)+1,y div Round(Image1.Height/H))


вопрос остался по второй проблеме, как сделать так, чтобы скрол бокс автоматом выставлял в центр место картинки в котором кликаем мышью и которое увеличивается.


 
Писатель   (2012-09-26 23:56) [4]

да, вообщем то нужно сделать тоже самое что делает паинт, просто руками каждый раз вставлять в паинт сохранять, потом вставлять куда надо и т.д. я утомился и решил сделать свой паинт с блек джеком и всем таким.


 
Германн ©   (2012-09-27 02:04) [5]


> вопрос остался по второй проблеме, как сделать так, чтобы
> скрол бокс автоматом выставлял в центр место картинки в
> котором кликаем мышью и которое увеличивается.

А как пробовал делать?


 
Писатель   (2012-09-28 17:24) [6]

может есть идеи как попробовать сделать?


 
Писатель   (2012-09-28 18:15) [7]

Обнаружил что, высота картинки и ScrollBox1.VertScrollBar.Range почти равны. попробовал сделать так:


if (W = 0) and (Image1.Width = 0) then
   Xnew := 0
 else
   Xnew := (x div (Image1.Width div W));

 if (H = 0) and (Image1.Height = 0) then
   Ynew := 0
 else
   Ynew := (y div (Image1.Height div H));

ScrollBox1.VertScrollBar.Position := Ynew;
ScrollBox1.HorzScrollBar.Position := Xnew;


работает только на первом клике....


 
Писатель   (2012-09-28 19:11) [8]

begin
   if Button = mbLeft Then
   begin
     Image1.Width  := Image1.Width  * 2;
     Image1.Height := Image1.Height * 2;
     ScrollBox1.VertScrollBar.Range    := Image1.Height;
     ScrollBox1.HorzScrollBar.Range    := Image1.Width;
     ScrollBox1.VertScrollBar.Position := y*2;
     ScrollBox1.HorzScrollBar.Position := x*2;
   end;
   if Button = mbRight then
   begin
     Image1.Width :=  Round(Image1.Width   /2);
     Image1.Height := Round(Image1.Height / 2);
     ScrollBox1.VertScrollBar.Range    := Image1.Height;
     ScrollBox1.HorzScrollBar.Range    := Image1.Width;
     ScrollBox1.VertScrollBar.Position := y div 2;
     ScrollBox1.HorzScrollBar.Position := x div 2;
   end;
 end;


так попадает +- километр - как центрировать точку скролами (



Страницы: 1 вся ветка

Текущий архив: 2013.03.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
15-1354009804
xayam
2012-11-27 13:50
2013.03.31
Шахматная задача


15-1354739404
Юрий
2012-12-06 00:30
2013.03.31
С днем рождения ! 6 декабря 2012 четверг


15-1355074113
alexdn
2012-12-09 21:28
2013.03.31
Доступ к mysql


15-1354444189
DVM
2012-12-02 14:29
2013.03.31
Анкеты опять слетели?


15-1354306589
Dennis I. Komarov
2012-12-01 00:16
2013.03.31
Зима пришла!