Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
 Аватар для kating
1 / 1 / 2
Регистрация: 09.05.2012
Сообщений: 49

При выборе цвета в палитре, окрашивался рисунок.

14.05.2012, 00:10. Показов 4152. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите, пожалуйста, мне надо сделать, чтобы была палитра с набором цветов, и рисунок-черный контур автомобиля. При нажатии на какой-нибудь цвет автомобиль должен окрасится в этот цвет. Как и с помощью каких компонентов это можно сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2012, 00:10
Ответы с готовыми решениями:

Какую часть экрана, при разрешении 1024х768 пикселей, будет занимать рисунок при 63536 цветной палитре
Помогите пожалуйста с задачей на тему: Кодирование графической информации. Растровый код занимает 8 Кб. Какую примерную часть экрана при...

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

При выборе цвета из перечисления enum должны задаваться коэффициенты при помощи атрибутов
Помогите пожалуйста! Есть задание:добавление ингредиента в кулинарный стакан, при выборе цвета из перечисления enum должны задаваться...

17
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
14.05.2012, 09:35
Цитата Сообщение от kating Посмотреть сообщение
с помощью каких компонентов это можно сделать?
ColorDialog
вот примерчик.
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
procedure TForm1.Button1Click(Sender: TObject);
begin
with Canvas do
 begin
  rectangle(20,20,80,120); //рисуем черным прямоугольник
  ellipse(50,150,100,200);//и круг
 end;
 
end;
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var c:TColor;
begin
//выбираем цвет
//и кликаем по фигуре
if ColorDialog1.Execute then c:=ColorDialog1.Color;
with Canvas do
 begin
  if (x>=20)and(x<=80)and(y>=20)and(y<=120)then
    begin
     pen.Color:=c;
     brush.Color:=c; //окрашиваем
     rectangle(20,20,80,120);
    end
   else if (x>=50)and(x<=100)and(y>=150)and(y<=200)then
    begin
     pen.Color:=c;
     brush.Color:=c;
     ellipse(50,150,100,200);
    end;
  end;
 
end;
Добавлено через 1 минуту
Или ColorBox
1
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
14.05.2012, 12:13
ColorBox предварительно нарисовать на конве автомобиль. А потом его снова перерисовать с нужным цветом.
Delphi
1
Pen.color:=colorbox1.color;
1
 Аватар для kating
1 / 1 / 2
Регистрация: 09.05.2012
Сообщений: 49
14.05.2012, 21:51  [ТС]
Puporev, спасибо за пример, но он у меня пока не работает, выделяет строку с FormMouseDown. Я не пойму, что это за компонент.
Я вообще поместила на форму только Button и ColorDialog, наверно надо еще что-то?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
14.05.2012, 22:00
Цитата Сообщение от kating Посмотреть сообщение
выделяет строку с FormMouseDown. Я не пойму, что это за компонент.
Это не компонент. Это процедура, ее нужно инициировать кликнув 2 раза в Инспекторе Объектов для формы на вкладке Events в окошечке против OnMouseDown.
0
 Аватар для kating
1 / 1 / 2
Регистрация: 09.05.2012
Сообщений: 49
14.05.2012, 22:09  [ТС]
Спасибо, а то я, то нашла её в инспекторе, но 2 раза не додумалась щелкнуть.

Добавлено через 5 минут
Теперь она работает, но это все таки не то что мне нужно. Палитра должна быть тоже на форме, и желательно чтобы я могла подписать цвета.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
15.05.2012, 07:18
Тогда используйте компонент ColorBox с вкладки Additional.
Выбор цвета
Delphi
1
c:=ColorBox1.Selected;
Можете почитать
http://delphi-prg.ru/komponent... ybor-cveta
0
 Аватар для kating
1 / 1 / 2
Регистрация: 09.05.2012
Сообщений: 49
15.05.2012, 10:15  [ТС]
Спасибо, а вы не знаете можно ли в нем изменять названия стандартных цветов?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
15.05.2012, 12:06
kating, Если Вам нужно например всего несколько цветов с названиями на русском, то можно просто использовать кнопки, присваивая каждой свой цвет, нажимаете и что-то окрашивается.
0
 Аватар для kating
1 / 1 / 2
Регистрация: 09.05.2012
Сообщений: 49
15.05.2012, 21:51  [ТС]
Мне то надо много цветов, ну а если с кнопками, то как прописать, чтобы закрашивалась только белая часть рисунка?
Миниатюры
При выборе цвета в палитре, окрашивался рисунок.  
0
 Аватар для r@di0
103 / 92 / 20
Регистрация: 24.01.2009
Сообщений: 519
16.05.2012, 11:31
kating, вот набросал Вам небольшой пример по замене цветов изображения.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure ChangeColor(Bmp: TBitMap; CurrentColor, NewColor: TColor);
type
  TRGBTripleArray = array[0..10000] of TRGBTriple;
  PRGBTripleArray = ^TRGBTripleArray;
var
  x, y: Integer;
  Line: PRGBTripleArray;
begin
  for y := 0 to Bmp.Height - 1 do
  begin
    Line := Bmp.ScanLine[y];
    for x := 0 to Bmp.Width - 1 do
      if RGB(Line^[x].rgbtRed, Line^[x].rgbtGreen, Line^[x].rgbtBlue) = CurrentColor then
      begin
        Line^[x].rgbtRed := GetRValue(NewColor);
        Line^[x].rgbtGreen := GetGValue(NewColor);
        Line^[x].rgbtBlue := GetBValue(NewColor);
      end;
  end;
end;
Цветом NewColor закрасятся пиксели с цветом CurrentColor.
1
 Аватар для kating
1 / 1 / 2
Регистрация: 09.05.2012
Сообщений: 49
24.05.2012, 17:40  [ТС]
Цитата Сообщение от r@di0 Посмотреть сообщение
kating, вот набросал Вам небольшой пример по замене цветов изображения.
Delphi
1
2
3
4
procedure ChangeColor(Bmp: TBitMap; CurrentColor, NewColor: TColor);
type
...
end;
Цветом NewColor закрасятся пиксели с цветом CurrentColor.
Я ничего не понимаю в графики, а надо срочно сделать. r@di0, какие к вашему коду вообще нужны компоненты, ведь изображение надо не в Image вставлять, или туда? Может у вас есть какие-нибудь похожие исходники.
0
 Аватар для r@di0
103 / 92 / 20
Регистрация: 24.01.2009
Сообщений: 519
25.05.2012, 16:27
kating, Вы можете загрузить изображение в Image.
Тогда вызывать процедуру можно напр. так:
Delphi
1
ChangeColor(Image1.Picture.Bitmap, clGreen, clRed);
Так Вы можете закрасить все зеленые (clGreen) пиксели красным (clRed).
0
 Аватар для r@di0
103 / 92 / 20
Регистрация: 24.01.2009
Сообщений: 519
26.05.2012, 20:20
kating, ну что? - так и не разобрались?
Посмотрите пример во вложении.
Вложения
Тип файла: rar sample.rar (373.5 Кб, 18 просмотров)
1
 Аватар для kating
1 / 1 / 2
Регистрация: 09.05.2012
Сообщений: 49
26.05.2012, 22:59  [ТС]
Спасибо большое, но это все-равно, не то. Конечно с заменой цвета немного разобралась. Но мне обязательно нужна нестандартная палитра, с подписью каждого цвета. Может вы знаете, как сделать что-то типа "пипетка" в фотошопе, чтобы можно была нажать на какой-нибудь цвет на форме, и потом окрасить этот автомобиль.
0
 Аватар для r@di0
103 / 92 / 20
Регистрация: 24.01.2009
Сообщений: 519
26.05.2012, 23:22
Для создания "пипетки" обрабатывайте событие OnMouseDown компонента Image.
В этом обработчике, уже зная координаты пикселя, Вы можете узнать его цвет.
0
 Аватар для kating
1 / 1 / 2
Регистрация: 09.05.2012
Сообщений: 49
26.05.2012, 23:32  [ТС]
А можно еще вопрос. Вот по вашей программе, как сделать чтобы окрашивал только белую область, без выбора в палитре?
0
 Аватар для r@di0
103 / 92 / 20
Регистрация: 24.01.2009
Сообщений: 519
26.05.2012, 23:44
Изначально задайте NewColor в clWhite, а затем при выборе нового цвета:
CurrentColor:=NewColor;
NewColor:=<НОВЫЙ ЦВЕТ>;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.05.2012, 23:44
Помогаю со студенческими работами здесь

Смена цвета при выборе меню
Подскажите как сделать так, есть меню музыка, видео, фото, и когда пользователь заходит в один из пунктов меню, поменять цвет надписи,...

Изменение цвета строки при выборе чекбокса
Подскажите, как поменять цвет строки при выбранном чекбоксе например на такой цвет .active { background-color: green; ...

Изменение цвета select при выборе option
код чужой, сам не программист цель, что бы пр выборе определенных пунктов у шрифта в select был определенный цвет типа если value 1...

Смена цвета блока при выборе одного из 3х
Всем привет. Помогите пожалуйста. Есть 3 блока подряд фото во вложении. Их код выглядит вот так : &lt;div...

При выборе цвета из select сохраняется только первый
&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;/&gt; &lt;title&gt;&lt;/title&gt; &lt;meta...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru