Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 29.08.2014
Сообщений: 39

Как ускорить затемнение области?

06.01.2018, 16:25. Показов 1669. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Никогда не умел правильно формулировать заголовки тем, так что подробнее распишу тут. Значится у меня есть большая квадратная форма. На неё во весь размер я плюхнул панель с какой-то картиночкой на бэкграунде. Я хотел добавить эффект затемнения экрана и потому (может есть способ лучше, но я хз), я добавил поверх панели во всю её площадь пикчер бокс. В этот пикчер бокс у меня заливается от 1 до 100 картиночки с прозрачностью от 1 до 100. Ну и собсна, таким образом, я реализовал затемнение экрана, чтобы потом, например, переходить в другое меню и т.д. и т.п. Каждую новую картинку из этой 100 программа присваивает пикчербоксу из таймера. Я поставил ему самый быстрый такт - 1мс. Т.е. при нажатии на кнопку, запускатеся таймер, всё затемняется, а потом он вырубается, и программа живёт дальше своей жизнью.

ВОПРОС!

На всех компах скорость затемнения РАЗНАЯ. Тестил на 3 машинах. Шо делать? Я начал думать, что это потому что таймер (если что я на вин формс, да, совсем атсрала питек, я знаю). Типа таймер, как я ДУМАЮ (я же не знаю, потому и спрашиваю у людей добрых совета и знаний), точнее такт таймера зависит от такта процессора. Если это правда, то как отвязаться и сделать моё затемнение адекватным? Если нет, то просто что мне делать? Конечно, если уменьшить окно до размеров ярлыка, то всё чики-пуки, но у меня большое окнище и надо его оставить таким. Может надо что-то с clock делать, чё-нить там выщитывать и типа будет привязка ко времени?
Прощу у вас помощи и совета!

Добавлено через 36 минут
Я тут ещё подумал... может есть какой-то более быстрый способ присваивания картинок? Или типа того...
Я сейчас делаю это так.
C++
1
2
3
String^ pages=Convert::ToString(page);
MenuFading->Image = MenuFading->Image->FromFile("Data\\Cube"+pages+".png");
page++;
Может их надо сначала залить в ресурсы? Или ещё как-то куда-то добавить. Если проблема в этом, то опять же прошу совета куда залить и как именно. Спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.01.2018, 16:25
Ответы с готовыми решениями:

Dell Inspiron N5010; Затемнение небольшой области экрана ноутбука
Вообщем такая фигня с экраном уже несколько месяцев. Ноутбуку где-то 20 месяцев, но матрица новее, менял более года назад. Этот дефект...

Как отключить затемнение колонтитулов?
Здравствуйте! Подскажите, пожалуйста, можно ли и как сделать в колонтитулах отображаемые на экране цвета картинки, такими же, как в...

Как реализовать затемнение с текстом на блоке
Код товара вот такой <div class="list-item" id="last_add-item-14"><div class="one_mtr"> <div class="one_mtr_image"> <div...

4
 Аватар для Sklifosofsky
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
07.01.2018, 21:11
Цитата Сообщение от Hastings Посмотреть сообщение
Типа таймер, как я ДУМАЮ (я же не знаю, потому и спрашиваю у людей добрых совета и знаний), точнее такт таймера зависит от такта процессора
Ошибочно. Задержка на всех компах будет одинаково для таймера, а вот скорость обработки кода в блоке будет зависть от производительности системы. Для такой анимации вы выбрали совсем не тот подход, во первых слишком ресурсоемкий - закачка в память файла изображения, декодирование, наложение на поверхность, присвоение контролу, + может быть утечка памяти в связи чудной работы мусорщика на .net (с изображениями).
Самое простое, по мне, использовать ресурсы gdi. Но там так же придется считаться с производительностью.
Я так понимаю, в нужный момент на форму натягивается pictureBox и производит анимацию затемнения?
0
1 / 1 / 0
Регистрация: 29.08.2014
Сообщений: 39
07.01.2018, 22:05  [ТС]
Да. Но вообще он всегда весит этот самый пикчер бокс, просто визибл=фолз
0
 Аватар для Sklifosofsky
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
08.01.2018, 01:16
Лучший ответ Сообщение было отмечено Hastings как решение

Решение

Попробуйте так.
Сделал затенение заднего фона формы без pictureBox
Аналогично делается для других контролов, главное событие "рисования" подписать.
Но это работает только с картинкой, а вот, если вам необходимо одновременно все элементы таким образом скрывать, то придется докостыливать


Кликните здесь для просмотра всего текста
C++
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
53
54
55
56
57
        int _colorA = 0x00000000;
        int _colorB = 0xff000000;
        float _ratioBlend = 0.0f;
        SolidBrush ^_curColor = gcnew SolidBrush(Color::FromArgb(_colorA));
        Timer ^_timer;
        const int _timePlay = 500;
        const int _interval = _timePlay / 40;
        const float _step = (float)_interval / (float)_timePlay;
 
        System::Void RunAnimation()
        {
 
            if (_timer == nullptr)
            {
                _timer = gcnew Timer();
                _timer->Interval = _interval;
                _timer->Tick += gcnew EventHandler(this, &MyForm::Animate);
                _timer->Start();
            }
        }
 
        System::Void Animate(System::Object ^sender, System::EventArgs ^e)
        {
 
            _ratioBlend += _step;
 
            if (_ratioBlend > 1.0f)
            {
                _ratioBlend = 1.0f;
                _timer->Stop();
                delete _timer;
                _timer = nullptr;
            }
 
            _curColor->Color = Color::FromArgb(GetBlendColor(_colorA, _colorB, _ratioBlend));
 
            this->Invalidate();
        }
        
        int GetBlendColor(int ColorA, int ColorB, float Ratio /*значения от 0.0f до 1.0f*/)
        {
            Byte *a = (Byte*)&ColorA;
            Byte *b = (Byte*)&ColorB;
            return a[0] + int((b[0] - a[0]) * Ratio) |
                (a[1] + int((b[1] - a[1]) * Ratio)) << 8 |
                (a[2] + int((b[2] - a[2]) * Ratio)) << 16 |
                (a[3] + int((b[3] - a[3]) * Ratio)) << 24;
        }
        
        System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
            this->RunAnimation();
        }
 
        System::Void MyForm_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) // подписка на событие Paint формы
        {
            e->Graphics->FillRectangle(_curColor, e->ClipRectangle);
        }


Запуск с кнопки
1
1 / 1 / 0
Регистрация: 29.08.2014
Сообщений: 39
08.01.2018, 15:46  [ТС]
Спасибо большое, правда пробывать я это даже не буду, ахах) На дня я решил перестать страдать и перешёл на SFML. Бесконечные проблемы и костыли при создании чего-то внятного на winfroms уже изрядно задолбало.
Всё равно ещё раз спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.01.2018, 15:46
Помогаю со студенческими работами здесь

Как убрать затемнение подхедера в теме?
Доброго дня. Подскажите пожалуйста, как убрать затемнение картинки подхедера в теме Juridica. После того как картинка загружается в тему...

Как сделать постепенное затемнение картинки в PictureBox
Привет всем вопрос такой как сделать чтоб какринка в PictureBox. меняла якость в зависемости от времени если было что то похожее на...

Как убрать затемнение в теме Hestia (WordPress)
Как убрать затемнение в теме Hestia (WordPress) Я пытался найти параметр отвечающий за это, но я не смог. Как я понял затемнение равно 50%....

Как заставить перемещаться скролинг области, когда переходишь на строчку 'ниже' видимой части области?
Помогите, кто чем может!!! Суть проблемы: Некие данные в в виде таблички выводятся в область определенного размера с свойством...

Как ускорить программу?
Здравствуйте, такая задача: Страна состоит из n городов, которые расположены на оси. Координата i-го из городов равна xi. Выведите...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru