![]() |
xMaskImage
xMaskImage для больших картинок (более 800х600) работает некорректно: крешит выполнение программы или просто не применяется (участки с маской рисуются её цветом) в зависимости от конфигурации ПК. Если картинку уменьшить (или закомментить установку цвета маски) - всё работает.
Протестировал на трёх компах: win XP SP3 встроенный контроллер от интел, XP SP3 жираф 5700, XP x64 SP2 жираф 9600 gt Xors3d (если верить справке - больше отметок не нашёл) 1.15.738 (Dec 08 2011) ЧЯДНТ? ОТВЕТЫ в конце темы |
Ответ: xMaskImage
размер окна?
|
Ответ: xMaskImage
Это кто у нас тут текстуры 800х600 юзаетъ? 8 )
|
Ответ: xMaskImage
Цитата:
Цитата:
Вообще, апеллировать к тезису "это говнокод!" на булке, конечно, традиция, но: 1) не вижу смысла растекаться мыслею по древу на тему "чем оправдана такая реализация" (начнём с того, что это был прикидычный эскиз, и я знаю несколько вариантов реализации, лишённых описанной проблемы, но, обращаю внимание сообщества на - см. п.2). 2) подобное должно завершаться не крешем (или артефактами), а более информативно или содержать указания в хелпе. ах, йопти - я ж теги забыл Теги: Xors3D mask MAV memory access violation маскимейдж почему я идиот МАВ креш артфеакт без смс торрент бесплатно без ограничений и регистрации |
Ответ: xMaskImage
если картинку уменьшить до размеров меньше окна, тогда становится нормально?
|
Ответ: xMaskImage
Цитата:
|
Ответ: xMaskImage
Вложений: 1
Успешно провёл тест.
Версия DLL: Xors3d Engine version: 1.15.738.0 ( Dec 08 2011 ) Подробности в аттаче. Приложи чтоль твою пикчу да код покажи. |
Ответ: xMaskImage
у меня не работает, даже изменял картинку на 512x512 видео GMA X4500
|
Ответ: xMaskImage
Цитата:
|
Ответ: xMaskImage
Всем спасибо. Как и обещал - проблему обошёл. Работоспособность команды, вероятно, зависит от конфигурации ПК. Времени на обстоятельное тестирование пока нет.
|
Ответ: Не работает на Win XP SP 3.0
апд2: картинки в "чистом виде" рисуются. Вероятно дело в преобразованиях (рисование в буфер, накладывание имаг с маской) - коих у меня много. Но суть в том что на XP с древним железом это всё работало.
апд3: неадекватно отрабатывают конструкции типа Код:
int img=xLoadImage("ground.bmp"); |
Ответ: Не работает на Win XP SP 3.0
Может надо скорее xBackBuffer() нежели xGraphicsBuffer()???
|
Ответ: Не работает на Win XP SP 3.0
Цитата:
апд: и блокировка буфера (которая не нужна) тоже не влияет на результат апд2: и под ХР это всё работало апд3: одинаково не работает и в фуллскрине и в окне. апд4: если картинку не грузить, а создавать - то всё работает апд5: так же работать с буфером не удаётся, если он превышает размеры окна (да - на ХР [но может дело и не в ОС - а в видеокарте] работало) |
Ответ: Не работает на Win XP SP 3.0
Win 7 Максимальная (x64)
Все работает на ура... |
Ответ: Не работает на Win XP SP 3.0
Цитата:
Кстати, если в xDrawImageRect, например, правая граница рисуемого фрагмента будет выходить за пределы изображения, из которого этот фрагмент "вырезан", то и существующая часть (некоторая область слева) рисоваться не будет. Это только на моём конфиге? |
Ответ: Не работает на 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, время: 11:40. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot