Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
4 / 4 / 0
Регистрация: 30.06.2011
Сообщений: 175
1

Круги в делфи на изображение

01.12.2011, 23:44. Просмотров 2650. Ответов 18
Метки нет (Все метки)

У меня известны три радиуса

a=4, a=5, a=8

необходимо чтобы это все чертилось на картинке (которая загружается), и сохранялось...
как картинку загрузить - и сохранить - я знаю...

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

Добавлено через 14 часов 8 минут
Уже помогли почти .. спасибо

Добавлено через 10 часов 49 минут
Ситуация не стандартная... нужна помощь.... все дело в том что пока нет рисунка все чертит, но при загрузке рисунка - неожиданно чертит под рисунком...

файл прилагается вместе с рисунком
0
Вложения
Тип файла: rar kryg.rar (292.4 Кб, 41 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2011, 23:44
Ответы с готовыми решениями:

Изображение перекрёстка в делфи
Помогите,пожалуйста, решить задачи по делфи!!! Очень срочно!!!! Заранее огромное спасибо за...

Построить изображение в делфи
Даны две точки М1 (х1 , у1 ), М2(х2 , у2 ) и прямая Ах+By+С=0. Необходимо найти на этой прямой...

Круги
Всем привет!) пытаюсь сделать следующее на html'e следующее. То есть три круга (большой средний и...

круги
здраствуйте форумчани. Такой вопрос, я первый раз вижу бейсик ,а у нас в универе сейчас начался...

18
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
02.12.2011, 11:44 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
var
  Form1: TForm1;
  bm:TBitmap;//создаем переменную типа Битмап
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if openpicturedialog1.Execute then
bm:=TBitMap.Create; // экземпляр класса
//грузим в него изображение
bm.LoadFromFile(openpicturedialog1.FileName);
Image1.Canvas.Draw(0, 0, bm);//передаем на канву Имадже
end;
 
//рисуем картинку
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
     const
  R1=30;
  R2=50;
  R3=80;
begin
if button=mbright then
  with Image1.Canvas do begin
     pen.Color:=clred;
     Brush.Color:=clred;
     Brush.Style:=bsBDiagonal;
     Ellipse(x-R1,y-R1,x+R1,y+R1);
     pen.Color:=clGreen;
     Brush.Color:=clGreen;
     Brush.Style:=bsFDiagonal;
     Ellipse(x-R2,y-R2,x+R2,y+R2);
     pen.Color:=clYellow;
     Brush.Color:=clYellow;
     Brush.Style:=bsHorizontal;
     Ellipse(x-R3,y-R3,x+R3,y+R3);
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
if savedialog1.Execute then //созраняем канву в файл
Image1.Picture.SaveToFile(savedialog1.FileName);
end;
 
end.
1
4 / 4 / 0
Регистрация: 30.06.2011
Сообщений: 175
02.12.2011, 14:17  [ТС] 3
Спасибо большое

но появилось два вопроса....

1) пропал скроллеры - у меня картинка скажем если будет в 3 раза больше этого окна... у меня загружается только верхняя часть картинки (вообщем вся она не вмещается), а скроллов (ползунков) уже нет(((

где их прописать?


2) можно ли вместо скажем R1 - ввести числа с Edita?... что то сам пробывал ... он как ошибку показывает....


Заранее спасибо большое...
0
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
02.12.2011, 16:11 4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
var
  Form1: TForm1;
  bm:TBitmap;//создаем переменную типа Битмап
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if openpicturedialog1.Execute then
bm:=TBitMap.Create; // экземпляр класса
//грузим в него изображение
bm.LoadFromFile(openpicturedialog1.FileName);
//вот здесь нужно было не Draw, а  StretchDraw
Image1.Canvas.StretchDraw(Bounds(0,0,width,height), bm);//передаем на канву Имадже
end;
 
//рисуем картинку
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var r1,r2,r3:integer;
 
begin
//не забываем ввести корректные размеры
R1:=StrToint(Edit1.Text);
R2:=StrToint(Edit2.Text);
R3:=StrToint(Edit3.Text);
if button=mbright then
  with Image1.Canvas do begin
     pen.Color:=clred;
     Brush.Color:=clred;
     Brush.Style:=bsBDiagonal;
     Ellipse(x-R1,y-R1,x+R1,y+R1);
     pen.Color:=clGreen;
     Brush.Color:=clGreen;
     Brush.Style:=bsFDiagonal;
     Ellipse(x-R2,y-R2,x+R2,y+R2);
     pen.Color:=clYellow;
     Brush.Color:=clYellow;
     Brush.Style:=bsHorizontal;
     Ellipse(x-R3,y-R3,x+R3,y+R3);
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
if savedialog1.Execute then //созраняем канву в файл
Image1.Picture.SaveToFile(savedialog1.FileName);
bm.Destroy;
end;
 
end.
1
4 / 4 / 0
Регистрация: 30.06.2011
Сообщений: 175
02.12.2011, 18:01  [ТС] 5
Огромное спасибо...

а если скажем так (после нажатия кнопки программа вычисляет a,b,c

вычислила скажем a=90. b=70 c=50

как мне эти данные привязать....?
0
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
02.12.2011, 18:03 6
Цитата Сообщение от adelbaew Посмотреть сообщение
рограмма вычисляет a,b,c
А что это такое?
В коде на кнопке и напиши что и по какой формуле вычислять.
0
4 / 4 / 0
Регистрация: 30.06.2011
Сообщений: 175
02.12.2011, 18:26  [ТС] 7
да скажем на кнопку button прописано

a:= зависит от edit
b:= str(a);
c:= еще как нибудь не важно....

просто пытался после этого прописать скажем

R1:=StrToint(a);
R2:=StrToint(b);
R3:=StrToint(c);

так делфи ошибку показывает...

отмечаю, что эта button скажем 3 ... и она стоит перед рисованием круга...
0
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
02.12.2011, 18:29 8
Цитата Сообщение от adelbaew Посмотреть сообщение
просто пытался после этого прописать скажем
R1:=StrToint(a);
R2:=StrToint(b);
R3:=StrToint(c);
Так зачем всякие прелюдии?
StrToint(a); сразу читает из Эдита целое число.
0
4 / 4 / 0
Регистрация: 30.06.2011
Сообщений: 175
02.12.2011, 19:27  [ТС] 9
Так то оно так...

но пользователь скажем не знает чему равно a////

знает лишь что если ведет скажем число a1 - то благодаря большущей формуле (там косинусы и т.д.), она ему рассчитает радиус a

можно конечно заставить пользователя - вводить сначала a1, а потом получая а через лабел - заставить его вводить это а снова в другой едит...

но все это как то 15 век...(((
0
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
02.12.2011, 19:29 10
adelbaew, Это ты типа сам с собой?
0
4 / 4 / 0
Регистрация: 30.06.2011
Сообщений: 175
02.12.2011, 20:59  [ТС] 11
Да нет.... необходимо чтобы не просто с едита читала радиус a...

а чтобы через едит мы вели какое то число ... и потом программа расчитала уже радиус а...

скажем посчитала она радиус а ... как его прописать?

R1:=StrToint(a); - так вот нельзя...
0
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
02.12.2011, 21:02 12
Ввели число.
Delphi
1
2
a1:=StrToint(Edit1.Text);//если целое
R1:=формула для вычисления;
1
4 / 4 / 0
Регистрация: 30.06.2011
Сообщений: 175
05.12.2011, 11:48  [ТС] 13
Вообщем все задуманное так или иначе удалось реализовать - за что большое спасибо, Вам, Puporev

но появились еще более острые вопросы:

1) масштабирование - как его сделать на таком рисунке и вообще возможно ли это? ... ведь при загрузке рисунка у меня изменяется и x и y

2) можно ли реализовать скажем закраску круга с прозрачностью 30%, то есть закраску - но так чтобы объекты за кругами были хорошо разлечимы.. причем если скажем красный круг - должен закрашиваться полностью (самый близкий к центру), то зеленый и желтый - только внутри колец

то есть скажем зеленый закрашивается до своего радиуса начиная от красного круга..
0
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
05.12.2011, 13:19 14
1) масштабирование - как его сделать на таком рисунке и вообще возможно ли это? ... ведь при загрузке рисунка у меня изменяется и x и y
Это я бы сделал эмпирически. Выбрать объект на плане с известными размерами. Нарисовал круги, сравнил размеры, вычислил на калькуляторе масштаб.И потом при рисовании уже его использовать.
Delphi
1
Ellipse(x-round(R1*ms),y-round(R1*ms),x+round(R1*ms),y+round(R1*ms));
Добавлено через 2 минуты
Цитата Сообщение от adelbaew Посмотреть сообщение
можно ли реализовать скажем закраску круга с прозрачностью 30%, то есть закраску - но так чтобы объекты за кругами были хорошо разлечимы..
Это я не умею.
Цитата Сообщение от adelbaew Посмотреть сообщение
ричем если скажем красный круг - должен закрашиваться полностью (самый близкий к центру), то зеленый и желтый - только внутри колец
Так кто мешает нарисовать еще круги. И внутри их по разному красить.
0
4 / 4 / 0
Регистрация: 30.06.2011
Сообщений: 175
06.12.2011, 00:27  [ТС] 15
Цитата Сообщение от Puporev Посмотреть сообщение
Это я бы сделал эмпирически. Выбрать объект на плане с известными размерами. Нарисовал круги, сравнил размеры, вычислил на калькуляторе масштаб.И потом при рисовании уже его использовать.
Delphi
1
Ellipse(x-round(R1*ms),y-round(R1*ms),x+round(R1*ms),y+round(R1*ms));
Спасибо
0
4 / 4 / 0
Регистрация: 30.06.2011
Сообщений: 175
11.12.2011, 16:02  [ТС] 16
C масштабом более менее разобрался но есть вопросы такого плана:

Нельзя ли чтобы программа сохраняла размеры рисунка который загружает под параметрами:
скажем pa - ширина и pb - длина?

и вопрос по сохранению - что то прописал файл bmp - а сохраняет все равно не bmp -
посмотрите -- вложение ..
0
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
11.12.2011, 16:19 17
Цитата Сообщение от adelbaew Посмотреть сообщение
что то прописал файл bmp - а сохраняет все равно не bmp -
В окне диалога имя файла нужно писать с расширением, например 123.bmp

Добавлено через 50 секунд
Цитата Сообщение от adelbaew Посмотреть сообщение
чтобы программа сохраняла размеры рисунка
Куда сохраняла?
1
4 / 4 / 0
Регистрация: 30.06.2011
Сообщений: 175
11.12.2011, 19:13  [ТС] 18
сохраняла при загрузке изображения -

но тоесть чтобы я потом мог воспользоваться ими... в программе..
0
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
11.12.2011, 19:56 19
Нет проблем.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
begin
if openpicturedialog1.Execute then
bm:=TBitMap.Create; // экземпляр класса
//грузим в него изображение
bm.LoadFromFile(openpicturedialog1.FileName);
w:=bm.Width;//ширина
h:=bm.Height;//высота
showmessage('w='+Inttostr(w)+'  h='+inttostr(h));//просто для проверки
//вот здесь нужно было не Draw, а  StretchDraw
Image1.Canvas.StretchDraw(Bounds(0,0,width,height), bm);//передаем на канву Имадже
end;
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2011, 19:56

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как в Делфи выполнить код, написанный на Делфи, например в поле ввода?
Есть способ в Делфи выполнить код, написанный на Делфи, например в поле ввода?

Здр, пожалуйста попробуйте запутсить .exe написанное на делфи 10 у себя, те у кого делфи 7
и скиньте скрин пожалуйста срочно http://www.fayloobmennik.net/4874373 перед тес как запустить,...

У меня стоит Делфи 5, возможно еще поставить и Делфи 7, или будут проблемы?!
Где можно скачать Делфи 7, дайте ссылку! У меня стоит Делфи 5, возможно еще поставить и Делфи 7,...

Нарисовать круги
Добрый вечер, господа, начинаю изучать C# и нужна ваша помощь Мне надо нарисовать эти круги, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.