это быстрый способ рисовать большой DIB на экране в окнах - PullRequest
0 голосов
/ 31 июля 2009

Я программирую в Windows C ++. Я хочу знать, какой быстрый способ нарисовать DIB на экране. Изображение может быть растянуто.

Быстрее, чем StretchDIBits, быстрее, чем SetDIBitsToDevice. Быстрее, чем StretchBits.

и с высоким качеством растяжения.

Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 31 июля 2009

Функция API StretchDIBits, я думаю, использует преимущества аппаратного обеспечения. Кроме этого, взгляните на BitBlt / StretchBlt.

Также, есть другие вопросы относительно StretchDIBits, на которые вы могли бы взглянуть, если вы выберете этот маршрут.


Если вы не удовлетворены этими методами, я не знаю, что еще вам сказать. Ваш процессор может сделать только так много. Убедитесь, что вы кэшируете результаты операций, когда можете и только обновляете то, что вам нужно . Посмотрите на OpenGL или DirectX , чтобы в полной мере использовать вашу видеокарту.

0 голосов
/ 31 июля 2009

Из того, что я помню, когда я взглянул на исходный код Windows, Stretchblt был написан летним практикантом в середине 1980-х и никогда не был исправлен. Один и тот же неэффективный код был распространен на все версии Windows. На некоторых мобильных устройствах Windows StretchBlt будет использовать аппаратное ускорение 2D, но не на настольных Windows. Используйте DirectDraw на окнах рабочего стола, чтобы использовать аппаратное ускорение 2D и получить быстрый блиц. В моих продуктах для настольных видеоигр у меня есть собственный код stretchblt, который растягивает биты в буфере памяти, а затем вызывает BitBlt, чтобы скопировать их на дисплей, и это значительно быстрее, чем простой вызов StretchBlt.

То, что я считаю основной причиной сбоев StretchBlts, заключается в том, что код полностью игнорирует скорость кэшированной / некэшируемой памяти и перебивает кэш при растяжении изображения.

...