C++ Оптимизация чтения массива с пикселями

Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
540
Реакции[?]
130
Поинты[?]
2K
Всем привет, пытаюсь оптимизировать чтение массива пикселей для быстрой работы.
Он читает массив пикселей в перевернутом виде, вот код.
Screenshot_1.png
 
Последнее редактирование:
всем прив верите ли вы в призраков ???
Забаненный
Статус
Оффлайн
Регистрация
17 Авг 2018
Сообщения
861
Реакции[?]
338
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А как у тебя эта функция вызывается?
 
Легенда форума
Статус
Онлайн
Регистрация
10 Дек 2018
Сообщения
4,381
Реакции[?]
2,284
Поинты[?]
189K
Всем привет, пытаюсь оптимизировать чтение массива пикселей для быстрой работы.
Он читает массив пикселей в перевернутом виде, вот код.
Посмотреть вложение 190523
Операции инкремента лучше префиксные использовать, они производительнее. Кроме этого больше ничего не могу сказать.
 
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
540
Реакции[?]
130
Поинты[?]
2K
Операции инкремента лучше префиксные использовать, они производительнее. Кроме этого больше ничего не могу сказать.
ты имеешь ввиду, так сделать?
Но это декремент. Инкремент в принципе уже везде был сделан, где идёт нагрузка.
1643790604400.png
 
всем прив верите ли вы в призраков ???
Забаненный
Статус
Оффлайн
Регистрация
17 Авг 2018
Сообщения
861
Реакции[?]
338
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А у тебя буффер вообще очищается?
 
Легенда форума
Статус
Онлайн
Регистрация
10 Дек 2018
Сообщения
4,381
Реакции[?]
2,284
Поинты[?]
189K
ты имеешь ввиду, так сделать?
Но это декремент. Инкремент в принципе уже везде был сделан, где идёт нагрузка.
Посмотреть вложение 190530
У тебя BuffPos увеличивается постфиксными операторами инкремента, а не префиксными.
Советую сделать так: *(++BuffPos)
 
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
540
Реакции[?]
130
Поинты[?]
2K
А у тебя буффер вообще очищается?
Добавил, прибавилось +- 3 фпс :)
1643791712568.png
У тебя BuffPos увеличивается постфиксными операторами инкремента, а не префиксными.
Советую сделать так: *(++BuffPos)
щас, пробую спасибо
*(++BuffPos)
Начал получать не правильный цвет и ничего не изменилось
Screenshot_1.pngScreenshot_2.png
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
20 Окт 2018
Сообщения
427
Реакции[?]
117
Поинты[?]
0
Всем привет, пытаюсь оптимизировать чтение массива пикселей для быстрой работы.
Он читает массив пикселей в перевернутом виде, вот код.
Посмотреть вложение 190523
Во первых у тебя BitsPerPixel - константа, сравнение BitsPerPixel > 24 можно сделать один раз в самом начале. Во вторых если а) BitsPerPixel > 24 - true, и б) структура Pixel выглядит как struct Pixel { uint8_t B; uint8_t G; uint8_t R; uint8_t A; } ты можешь заменить весь for width на memcpy(&Pixels[(height - 1 - I) * width], BuffPos, 4 * width); BuffPos += 4 * width; В третьих я не очень понимаю зачем переворачивать весь огромный массив, если можно получать только тот пиксель, что тебе нужен(Pixel px = *(Pixel*)&BuffPos[(height - 1 - y) * width + x])
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
28 Дек 2018
Сообщения
520
Реакции[?]
196
Поинты[?]
36K
Насколько я понял, изучив твой код, можно сделать кэширование
 
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
540
Реакции[?]
130
Поинты[?]
2K
Во первых у тебя BitsPerPixel - константа, сравнение BitsPerPixel > 24 можно сделать один раз в самом начале. Во вторых если а) BitsPerPixel > 24 - true, и б) структура Pixel выглядит как struct Pixel { uint8_t B; uint8_t G; uint8_t R; uint8_t A; } ты можешь заменить весь for width на memcpy(&Pixels[(height - 1 - I) * width], BuffPos, 4 * width); BuffPos += 4 * width; В третьих я не очень понимаю зачем переворачивать весь огромный массив, если можно получать только тот пиксель, что тебе нужен(Pixel px = *(Pixel*)&BuffPos[(height - 1 - y) * width + x])
Спасибо огромное:kreygasm:
 
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
540
Реакции[?]
130
Поинты[?]
2K
Во первых у тебя BitsPerPixel - константа, сравнение BitsPerPixel > 24 можно сделать один раз в самом начале. Во вторых если а) BitsPerPixel > 24 - true, и б) структура Pixel выглядит как struct Pixel { uint8_t B; uint8_t G; uint8_t R; uint8_t A; } ты можешь заменить весь for width на memcpy(&Pixels[(height - 1 - I) * width], BuffPos, 4 * width); BuffPos += 4 * width; В третьих я не очень понимаю зачем переворачивать весь огромный массив, если можно получать только тот пиксель, что тебе нужен(Pixel px = *(Pixel*)&BuffPos[(height - 1 - y) * width + x])
Я считываю весь массив для получения всех пикселей.
Чтобы потом из этого массива, получать определённую область с пикселями равные нужному мне цвету.
 
Сверху Снизу