whale 6 Пятница в 21:35 Опубликовано Пятница в 21:35 · Жалоба Есть фотка высота 3200 ширина 1600, нужно что бы она плавно выезжала справа, проходила экран и уезжала слева. Реализовано на DirectDraw lpDDSBack01->BltFast(sr.left-1,sr.top, lpDDSBack01, &sr, FALSE); lpDDSPrimary->Blt(&wr, lpDDSBack01, &sr, DDBLT_WAIT, 0); Те сдвигаем lpDDSBack01 на один столбец методом копирования и выводим на lpDDSPrimary. Все работает но как то слишком медленно, весь проход занимает аж 30сек, можно как то ускорить ? Сам цикл бегает в потоке ничего его не тормозит кроме копирования. Если копировать скажем сразу на 3 столбца то появляется замыливание изображения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 Пятница в 22:21 Опубликовано Пятница в 22:21 · Жалоба 42 минуты назад, whale сказал: можно как то ускорить ? Очевидно: Создать в памяти DC. Совместимый с экранным форматом и таким же размером, как экранное окно. Загрузить изображение в него один раз. А потом уже из него копировать в экранное ОЗУ, сдвигая на пиксель, сколько нужно раз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 Вчера в 08:17 Опубликовано вчера в 08:17 · Жалоба 8 hours ago, jcxz said: Загрузить изображение в него один раз Я несколько упростил описание, необходимо создать бегущую ленту из последовательных фото, для этого после сдвига буфера на 1 пиксель влево, справа в него в крайней столбец заноситься новые данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vov4ick 39 Вчера в 11:10 Опубликовано вчера в 11:10 · Жалоба Тогда 2 контекста с картинками и их двигать по основному. Может быть три чтобы совсем не было задержки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 74 20 часов назад Опубликовано 20 часов назад · Жалоба 17 hours ago, whale said: Все работает но как то слишком медленно, весь проход занимает аж 30сек ну так-то 1600 пикселей поделить на ~60 кадров/c секунд 30 и получится если по пикселю за кадр двигать. и по directdraw я сварщик не настоящий, но с opengl закинуть в картинку в gpu (glTexImage2D), нарисовать прямоугольник во весь размер glRects(-1,-1,1,1) а в шейдере сделать texelfetch(pic, vec2(x+xPos,y)), обновляя uniform xPos каждый кадр на сколько надо, не копируя ничего процессором вообще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 17 часов назад Опубликовано 17 часов назад (изменено) · Жалоба 2 hours ago, _pv said: с opengl Я с этой либой не знаком совсем. 6 hours ago, vov4ick said: 2 контекста с картинками Вы предлагаете сделать буфер длинной на две фотки, загрузить в него сразу две фотки и копировать из него скользящим окном в праймери ? После того как окно дойдет до конца буфера перегрузить его новыми фотками и окно переставить на начало ? Тогда устраняется копирование буфера само в себя, может и сработать ..... Изменено 17 часов назад пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 16 часов назад Опубликовано 16 часов назад · Жалоба 11 часов назад, whale сказал: Я несколько упростил описание, необходимо создать бегущую ленту из последовательных фото, для этого после сдвига буфера Всё то же самое, только экранную плоскость шириной = сумме картинок. И копировать оттуда в экранный контекст окно размером в экран, постепенно его сдвигая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 15 часов назад Опубликовано 15 часов назад (изменено) · Жалоба 26 minutes ago, jcxz said: сумме картинок Фоток может быть до сотни, думаю память этого не переживет, тем более иногда используют планшеты и всякий древний кал мамонта, каждая фотка 15мб итого надо полтора гектара видеопамяти или озу что хуже. Изменено 15 часов назад пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vov4ick 39 13 часов назад Опубликовано 13 часов назад · Жалоба Только сейчас дошло. Частота кадров же. 1600 точек / 60 Гц = 27 секунд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 12 часов назад Опубликовано 12 часов назад · Жалоба 2 часа назад, whale сказал: Фоток может быть до сотни, думаю память этого не переживет, тем более иногда используют планшеты и всякий древний кал мамонта, А если хоть немного подумать?? Вроде как очевидно всё. Сделайте кольцевой буфер из фоток. Шириной = ширина экранного окна + ширина максимальной фотки. И двигайте попиксельно. Добавляя новую фотку справа, когда старая полностью вошла в экран. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 206 5 часов назад Опубликовано 5 часов назад · Жалоба 21 час назад, whale сказал: создать бегущую ленту из последовательных фото Это типовой слайдер, смену кадров логично делать быстро, но гармонически по синусу, далее остановка для созерцания, а от тупого линейного сдвига даже в бегущих строках отказываются, потому как мозг далеко не каждого первого гражданина способен за ним угнаться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 4 часа назад Опубликовано 4 часа назад (изменено) · Жалоба 36 minutes ago, Plain said: смену кадров логично делать быстро, но гармонически по синусу Такое есть давно но иногда нужна именно лента. Ленту можно остановить, она создает более полное ощущение об пространстве, часть объектов попадает на стык и разделяется на две фотки итд Самое быстрое сейчас это если копировать скользящим окном в размер области вывода, если пытаться уменьшать окно ( те сначала ширина =1 а затем линейно возрастает до полной ширины и далее уже константа) то почему то скорость падает, пока занят выяснением этого эффекта. Изменено 4 часа назад пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться