Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

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

Пользователь
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
631
Реакции
134
Всем привет, пытаюсь оптимизировать чтение массива пикселей для быстрой работы.
Он читает массив пикселей в перевернутом виде, вот код.
Screenshot_1.png

 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А как у тебя эта функция вызывается?
 
Всем привет, пытаюсь оптимизировать чтение массива пикселей для быстрой работы.
Он читает массив пикселей в перевернутом виде, вот код.
Посмотреть вложение 190523
Операции инкремента лучше префиксные использовать, они производительнее. Кроме этого больше ничего не могу сказать.
 
Операции инкремента лучше префиксные использовать, они производительнее. Кроме этого больше ничего не могу сказать.
ты имеешь ввиду, так сделать?
Но это декремент. Инкремент в принципе уже везде был сделан, где идёт нагрузка.
1643790604400.png
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А у тебя буффер вообще очищается?
 
ты имеешь ввиду, так сделать?
Но это декремент. Инкремент в принципе уже везде был сделан, где идёт нагрузка.
Посмотреть вложение 190530
У тебя BuffPos увеличивается постфиксными операторами инкремента, а не префиксными.
Советую сделать так: *(++BuffPos)
 
А у тебя буффер вообще очищается?
Добавил, прибавилось +- 3 фпс :)
1643791712568.png

У тебя BuffPos увеличивается постфиксными операторами инкремента, а не префиксными.
Советую сделать так: *(++BuffPos)
щас, пробую спасибо
*(++BuffPos)
Начал получать не правильный цвет и ничего не изменилось
Screenshot_1.png
Screenshot_2.png
 
Последнее редактирование:
Всем привет, пытаюсь оптимизировать чтение массива пикселей для быстрой работы.
Он читает массив пикселей в перевернутом виде, вот код.
Посмотреть вложение 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])
 
Последнее редактирование:
Во первых у тебя 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:
 
Во первых у тебя 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])
Я считываю весь массив для получения всех пикселей.
Чтобы потом из этого массива, получать определённую область с пикселями равные нужному мне цвету.
 
Назад
Сверху Снизу