Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
43 / 37 / 17
Регистрация: 11.11.2009
Сообщений: 246
1

Подсветка изображения в image

26.12.2016, 17:00. Показов 1250. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть image с велосипедом внутри. Нужно, что бы при наведении на велосипед, появлялась подсветка. Но велосипед занимает не весь image, т.е. mousemove и mouseleave не помогут без каких-нибудь доп условий. Как подсветку реализовать знаю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2016, 17:00
Ответы с готовыми решениями:

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

Поворот изображения в Image
Необходимо по нажатию на кнопку поворачивать изображение в Image на 180 градусов. Подскажите как...

Авторазмер изображения, загруженного в Image
Я загружаю изображение через ImageN->Picture->LoadFromFile(OpenDialogN->FileName). Но открываемое...

Image, перемещение и масштабирование изображения
Есть программа которая загружает изображение в форму (я сделал на Image), необходимо при помощи...

8
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
26.12.2016, 18:12 2
есть такой вариант.
кропотливый (регион или линия)
и в двух случаях надо создать координаты по контуру велесипеда.
если регион то вычислять координаты и если мышка в регионе то вывести сверху на велосипеде новую картинку велика с подсветкой.
также и с линиями.
в своей программе я использовал и два метода. в регионе вычисляются координаты абонентов на карте и линии вычисляют координаты улицы , с выводом на экран.
Миниатюры
Подсветка изображения в image  
1
43 / 37 / 17
Регистрация: 11.11.2009
Сообщений: 246
04.05.2017, 19:57  [ТС] 3
в общем немного подумал, и получил такой вариант. Фон изображения какой-нибудь не используемый на изображении цвет + свойство transparent.
C++
1
2
3
4
5
6
int t=0;
void __fastcall TForm1::Image2MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{if (Image2->Canvas->Pixels[X][Y]!=Image2->Canvas->Pixels[0][0] && t==0) {t=1; Image2->Picture->LoadFromFile("new.bmp");}
if (Image2->Canvas->Pixels[X][Y]==Image2->Canvas->Pixels[0][0] && t==1 || X==0 || Y==0 || X==Image2->Width-1 || Y==Image2->Height-1) {t=0; Image2->Picture->LoadFromFile("new0.bmp");}
}
0
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
05.05.2017, 12:52 4
Vergil,
Тоже не плохое решение.
тогда еще и надо добавить условие, если не меняется картинка то не загружать туже самую картинку.

Добавлено через 1 минуту
сейчас при движении курсора мышки всегда загружается картинка.
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
05.05.2017, 14:06 5
Цитата Сообщение от lifeforce Посмотреть сообщение
добавить условие, если не меняется картинка то не загружать туже самую картинку
lifeforce, у ТС это, вроде бы, флажок t регулирует. Хотя в динамике перегружать картинки из файла - некрасиво (если, конечно, ОСь со своими кэшами этот момент не оптимизирует...).
0
43 / 37 / 17
Регистрация: 11.11.2009
Сообщений: 246
06.05.2017, 01:57  [ТС] 6
Да, флаг t регулирует это дело. Я сначала закинул его в саму функцию, где он исправно с каждым движением мыши обнулялялся. Так это был настоящий ад эпилептика. Сейчас такого нет.
nick42, Создать при инициализации формы битмап, в него закинуть обе картинки, и отрисовывать нужную половину по нужде или есть решение получше?
0
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
06.05.2017, 10:09 7
nick42,
Цитата Сообщение от nick42 Посмотреть сообщение
у ТС это, вроде бы, флажок t регулирует.
я просто добавил лейбл , и вот что получилось.
только один раз высветил другую картинку а потом по полю просто двигал мышкой и настрочил еще пустых подгрузок одной и той-же картинки.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm3::Image2MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
 {
 if (Image2->Canvas->Pixels[X][Y]!=Image2->Canvas->Pixels[0][0] && t==0 )
{t=1; Image2->Picture->LoadFromFile("req_code59_blue.bmp");}
 
if (Image2->Canvas->Pixels[X][Y]==Image2->Canvas->Pixels[0][0]
&& t==1 || X==0 || Y==0 || X==Image2->Width-1 || Y==Image2->Height-1
   )
{t=0; Image2->Picture->LoadFromFile("req_code59_green.bmp");
 Label1->Caption = StrToInt(Label1->Caption)+1;}
 
}
Изображения
 
0
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
06.05.2017, 10:21 8
Vergil, возможно надо еще и с координатами поработать. типа как я вначале намекнул на регион.
0
43 / 37 / 17
Регистрация: 11.11.2009
Сообщений: 246
06.05.2017, 14:12  [ТС] 9
Очень странно. Тоже добавил лейбл, и у меня счетчик увеличивался только перехода с картинки в фон и в момент выхода за пределы image, а если только по фону или изображения дергать, то не изменяется. Чутка переделал. Теперь картинки подгружаются только раз из файла. + добавил эвент mouseleave, ибо если слишком резко дергнуть мышку, то изображение на первоначальное не менялось. Про регионы почитал, но там все слишком сложно. Мне пока этого хватает. Хотя не понял как регионы нам помогут избавится от смены изображения?
new2 - склееное изображение из двух
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool t=0;
Graphics::TBitmap*  bNew = new Graphics::TBitmap;
 
void __fastcall TForm1::Image2MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
 if (Image2->Canvas->Pixels[X][Y]!=Image2->Canvas->Pixels[0][0] && t==0 )
{t=1; 
Image2->Canvas->CopyRect(Rect(0, 0, Image2->Width, Image2->Height),bNew->Canvas, Rect(Image2->Width, 0, Image2->Width*2,Image2->Height));; 
Label1->Caption = StrToInt(Label1->Caption)+1;}
 
if (Image2->Canvas->Pixels[X][Y]==Image2->Canvas->Pixels[0][0]&& t==1)
{t=0; 
Image2->Canvas->CopyRect(Rect(0, 0, Image2->Width, Image2->Height),bNew->Canvas, Rect(0, 0, Image2->Width,Image2->Height));
Label1->Caption = StrToInt(Label1->Caption)+1;}}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image2MouseLeave(TObject *Sender)
{if (t==1) {
Image2->Canvas->CopyRect(Rect(0, 0, Image2->Width, Image2->Height),bNew->Canvas, Rect(0, 0, Image2->Width,Image2->Height));}}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{bNew->LoadFromFile("new2.bmp");}
//---------------------------------------------------------------------------
0
06.05.2017, 14:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2017, 14:12
Помогаю со студенческими работами здесь

Загрузка изображения в компоненту Image
Вообщем, я должен загрузить изображение, однако их много и для соответствия нужно загружать...

Добавление png изображения в Image
Помогите а как png файл в image добавить я как то добавлял раньше типа что то там качал с инета...

Как удалить элемент изображения в Image?
как удалить элемент при нажатие на него в Image????

ADOTable и таблица с полем Image Сохранение изображения
Приветствую. Есть вот такая конструкция if (Form1->OpenDialog1->Execute()) { String...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru