Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1347384231
Писатель
2012-09-11 21:23
2013.03.31
Масштабирование BMP


15-1354825802
Юрий
2012-12-07 00:30
2013.03.31
С днем рождения ! 7 декабря 2012 пятница


15-1354998602
Юрий
2012-12-09 00:30
2013.03.31
С днем рождения ! 9 декабря 2012 воскресенье


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


2-1286953967
Evgeney
2010-10-13 11:12
2013.03.31
Вставка изображения в BLOB поле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский