![]() |
Ответ: Не работает на Win XP SP 3.0
Демо поможет.
|
Ответ: Не работает на Win XP SP 3.0
Цитата:
Да, виноват, надо сопровождать посты и примерами "под ключ" - но сейчас ограничен по времени. Прошу извинить. Постараюсь завтра реализовать что-то портативное для теста больших картинок. Ещё раз спасибо всем принявшим участие в обсуждении! зыж посты потом солью в одну тему по мере конкретизации |
Ответ: Не работает на Win XP SP 3.0
Цитата:
так, к "слову". |
Ответ: Не работает на Win XP SP 3.0
Цитата:
* - т.е. больше размеров экрана (см. выше). |
Image и артефакты
Вложений: 1
Все тесты могут работать по-разному на разных конфигурациях. Причём дело не в новизне: так, программа, которая заработала у меня некорректно, работала безбажно на древнем конфиге.
Вложение 16272 Тест 1. Работа с буфером. Тест показывает невозможность рисовать что-либо в загруженную картинку Код:
xAppTitle("sample"); Код:
xSetBuffer(xImageBuffer(IMstd)); |
Ответ: Image и артефакты
Тест 2. Поведение функций при неоднозначных аргументах.
Если в приведённом выше коде исправить значение переменной FRGM, например: Код:
int FRGM=300; Согласен: сказать, что это баг - нельзя, но всё же :mad: |
Ответ: Image и артефакты
Кношмаре сказал что загруженные картинки рид-онли.
|
Ответ: Image и артефакты
Вложений: 1
Тест 3. Работа с буфером через посредника.
Нет возможности работать с буфером загруженных картинок. Вывод: надо создать картинку в памяти и нарисовать в неё загруженную. Проверим: Код:
xAppTitle("sample"); Отмечу, что код Код:
xSetBuffer(xImageBuffer(IMstd)); Код:
xCopyRect(0,0,xImageWidth(IMstd0),xImageHeight(IMstd0),0,0, Попробуем картинку побольше: Вложение 16273 Теперь, если выполнить такой код: Код:
xAppTitle("sample"); Код:
xAppTitle("sample"); Выводы: 1) Чтобы иметь возможность работать с буфером загруженной картинки, её необходимо впечатать во вновь созданную. 2) Если размеры картинки превышают размеры окна - описанный выше способ не поможет: 2.1) если вы будете использовать функцию попиксельного копирования xCopyRect, то загруженное изображение корректно перенесётся в буфер созданного в памяти, но рисовать в буфер всё равно не получится - команды не возымеют результата; 2.2) если вы попробуете нарисовать загруженную картинку в буфер созданной - то не получите вообще ничего. |
Ответ: Image и артефакты
Промежуточные выводы:
0) Рассмотренные особенности могут проявляться, а могут и нет, вне зависимости от новизны железа, битности и версии ОС. 1) Цитата:
2) Лучше отдавать предпочтение рисованию попиксельно (в том числе xCopyRect), нежели xLine, xRect, xDrawImage и прочее. 3) С изображениями, размеры которых превышают размер окна работать (изменять буфер) всё равно не получится. Для своей задачи (если кому вдруг интересно) буду использовать свой класс, реализующий разбиение большой картинки на сегменты и предоставляющий интерфейс для работы с получившимся набором как с единым целым. 4) Команда xMaskImage тоже начинает работать нестабильно на больших изображениях (причём это может наблюдаться даже если остальные описанные здесь артефакты не проявляются). 5) Причины кроются в модели представления картинок в современных движках: картинка=текстура. Отсюда возникают дополнительные требования к размерам и кратности сторон. Подробнее - к SBJoker. 6) Картинка, используемая в тестах - взята отсюда http://commons.wikimedia.org/wiki/Fi...JPG?uselang=ru |
Ответ: Image и артефакты
Вложений: 1
Тест 4. Отрисовка примитивов
Попробуем нарисовать примитив в картинку. Размеры картинки выберем с учётом возможных артефактов: не превосходящими размеры окна. Усложним задачу, назначив точку вывода на 50 пикселей левее и выше начала картинки. Код:
xAppTitle("sample"); Вложение 16280 Прямоугольник должен занять всю область т.к. -50+650=600 (начало_вывода+размер=конец_вывода). Визуально - до рамки он не дотягивает. Для контроля вывожу поверх круг, с такими же аргументами - он действительно касается рамки. :4to: Но почему квадрат рисуется неправильно? |
Ответ: Image и артефакты
Такое ощущение, что длина и высота (иначе - размеры) прямоугольника считаются* по формуле:
D=B-abs(A) То есть в рассмотренном выше случае, вместо прямоугольника в 650 пкс длиной мы получаем 650-abs(-50)=650-50=600.(вместо D=B-A) А вот если мы укажем длину 650+50, т.е. 700, и выполним код, то результат буде идеален (получаемое изображение соответствует ожидаемому). Длина при этом как раз равна 700-50=650. Эта же закономерность была мной проверена на остальных размерах. Я конечно, заделаю поправку - но не комильфо. * - вы, конечно, понимаете условность оборота: можно сказать "соответствует в пересчёте", "подчиняется закону", а в следствие чего такая зависимость наступает - известно лишь разработчику. |
Ответ: Image и артефакты
Это всё конечно хорошо, но разработчика, как я понимаю больше нет.
|
Ответ: Image и артефакты
Офф форум он посещает ( area.xors3d.com ), а сюда не заходит видимо.
|
Ответ: Image и артефакты
Цитата:
|
Часовой пояс GMT +4, время: 13:47. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot