|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||
Добавить к коду подсчет яркостей22.09.2020, 09:49. Показов 7799. Ответов 124
Метки нет (Все метки)
Хочу расширить код подсчитывая количество значений яркости dithPixel например в виде структуры [Value, Count], но не могу вспомнить как это сделать через хеши (именованные массивы).
0
|
||||||
| 22.09.2020, 09:49 | |
|
Ответы с готовыми решениями:
124
Добавить к коду подсчет вызовов функции Подсчёт суммы значений в ячейках по столбцу по коду товара Добавить комментарии к коду |
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
|
| 29.09.2020, 14:52 | |
|
Элд Хасп
А почему 'k++;', а не 'k += <количество байтов на пиксель в текущем формате изображения>;'? И ещё лишние затраты времени во внутреннем цикле на трёхразовое обращение к элементу массива по [row, col]. Можно сократить количество этих обращений через использование временной переменной.
1
|
|
|
Модератор
|
||||||||||||||
| 29.09.2020, 15:00 | ||||||||||||||
|
belalugoci, добавил коэффициент пересчёта и разблокировку изображеия:
Я не спец по работе с изображениями. И не знаю как в других форматах считается яркость. Компилятор должен это сам оптимизировать. Будет проявляться только в Debug.
0
|
||||||||||||||
|
Модератор
|
|||||||
| 29.09.2020, 15:13 | |||||||
|
Есть небольшое ускорение, но думаю при сборке Release время было бы одинаковое
Someone007, и я ошибался на счёт времени создания байтового массива. Основное время (>90%) всё таки уходит на цикл. Добавлено через 1 минуту Возможно медленно работает из-за того что каждый байт надо преобразовать в int.
0
|
|||||||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
||
| 29.09.2020, 15:13 | ||
new byte[stride * bmp.Height];, даёт на выходе буфер размера 'Width * Height * <bytes per pixel>'. Где <bytes per pixel> явно больше единицы.В этот буфер выгружается всё изображение. Далее, в цикле значение 'k', относительно которого получаются значения цветов пикселей, проходит не по всему буферу, а лишь по первому его кусочку длиной 'Width * Height'.
1
|
||
|
Модератор
|
||
| 29.09.2020, 15:16 | ||
|
belalugoci, проверьте как по скорости будет работать на ваших данных.
Добавлено через 1 минуту Добавлено через 1 минуту Я до этого с изображениеями не работал. Подправьте код метода, как будет правильнее.
0
|
||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
|
| 29.09.2020, 15:29 | |
|
А где скачать это секретное изображение, на котором все проверяют скорость работы? Хочу у себя проверить.
0
|
|
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
||
| 29.09.2020, 15:30 | ||
|
1. Есть изображение размером 2x2, это 4 пикселя (Width*Height). 2. Каждый пиксель это, допустим, 4 байта (rgba), т.е. размер буфера будет (2 * 2) * 4 = 16. 3. Далее, если проходить вложенным циклом по Width * Height, то это будет 4 итерации, т.е. если делать k++, то оно будет меняться от нуля до трёх, т.е на первой итерации k=0 и будет корректно подсчитана яркость первого пикселя, на второй итерации k=1 и, вместо получения из буфера 'rgb' второго пикселя, оттуда будут получены значения 'gba' от первого пикселя, на третьей итерации k=2, и при обращении к буферу, будут извлечены 'ba' для первого пикселя и 'r' для второго, на последней итерации к=3, из буфера достаётся 'a' от первого пикселя и 'rg' от второго. Т.е. если 'k' идёт по буферу, а цикл по пикселям, то на каждом пикселе 'k' надо увеличивать на количество байт, которое занимает один пиксель в данном формате изображения.
1
|
||
|
Модератор
|
|||||||||
| 29.09.2020, 15:46 | |||||||||
|
belalugoci, многозадачный вариант.
Для больших изображений даёт преимущество.
Невнимательность.... ![]() Исправил в коде выше. Добавлено через 3 минуты Добавлено через 1 минуту
0
|
|||||||||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
|||||||
| 29.09.2020, 15:53 | |||||||
Байт на пиксель, наверное, можно как-то из параметров BitmapData достать, ну или просто вычислить как размер итогового буфера делённый на количество пикселей в изображении.
0
|
|||||||
|
Модератор
|
|||||||
| 29.09.2020, 16:06 | |||||||
0
|
|||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
||
| 29.09.2020, 16:07 | ||
|
0
|
||
|
Модератор
|
||
| 29.09.2020, 16:10 | ||
|
И +150 в предлагаемом вами. Создание байтового массива занимает < 20 мс Добавлено через 47 секунд Someone007, вы какой вариант использовали: синхронный, параллельный ?
0
|
||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
||||||||||||
| 29.09.2020, 16:14 | ||||||||||||
|
Кстати, по моему
0
|
||||||||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
|
| 29.09.2020, 16:44 | |
|
Почему-то скорость возрастает в разы если объявление переменной k перенести в локальную функцию.
Добавлено через 5 минут 67ms IntPtr+unsafe vs 79ms с обычным массивом, дебаг 66ms vs 80ms в релизе.
0
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|
| 29.09.2020, 16:51 [ТС] | |
|
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
|
| 29.09.2020, 17:16 | |
|
А еще тут по моему проблема с многопоточным вариантом, не синхронизируется доступ к массиву из разных потоков, из-за чего результат получается неверный и каждый раз разный.
0
|
|
|
Модератор
|
|||||||||||||||||
| 29.09.2020, 17:39 | |||||||||||||||||
|
Оптимальное количество будет разным на разных компах.
0
|
|||||||||||||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 29.09.2020, 18:31 [ТС] | ||
|
для будущих преобразований еще нужно картинку BMP представить в виде матрицы яркостей, то есть в коде, где вычисляется яркость, нужно это значение еще ставить в матрицу W*H изображения.
0
|
||
| 29.09.2020, 18:31 | |
|
Добавить комментарии к коду
Добавить к коду многоадресный делегат К готовому коду добавить процедуру К коду добавить вывод в консоль Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|