Форум: "Начинающим";
Текущий архив: 2013.03.31;
Скачать: [xml.tar.bz2];
ВнизКак нарисовать квадрат в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c