Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пт апр 28, 2017 3:09 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 93 сообщения ]  На страницу Пред. 13 4 5 6 7 След.
Автор Сообщение
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Чт июн 21, 2012 2:51 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 738
ревизия 2759 добавлены функции для рисования воксельных объектов (создаваемых в воксельном редакторе)
ревизия 2815 добавлена еще одна воксельная функция и 2 примера. Внешний вид примеров под спойлером.
Спойлер: Показать
Вложение:
vox_120621.png
vox_120621.png [ 20.47 КБ | 1770 просмотров ]


Вернуться к началу
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Пн ноя 05, 2012 3:33 am 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4080
Исходники vectors.obj есть на SVN? Актуальны они или нет, может уже перекочевали в buf2d?

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Пн ноя 05, 2012 12:55 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 738
Leency писал(а):
Исходники vectors.obj есть на SVN? Актуальны они или нет, может уже перекочевали в buf2d?

Исходников vectors.obj на SVN нет. Часть кода из vectors.obj перешла в buf2d.obj.
Актуальны они или нет вопрос сложный, потому что в них есть возможность вывода масштабируемых полигонов, чего нет в buf2d. Перекидывать эти функции в buf2d я не стал по той причине что хотел упростить формат для хранения полигонов.
Думаю что название этой темы можно поменять на Функции для рисования 2d графики (библиотеки vectors и buf2d) , только я как простой пользователь не могу менять название тем.


Вернуться к началу
СообщениеДобавлено: Пн ноя 05, 2012 2:02 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4080
На самом деле можешь, хоть это и не совсем очевидная функция, - для этого нужно отредактировать заголовок первого сообщения в теме.

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Дизеринг | Dithering
СообщениеДобавлено: Пн июл 22, 2013 6:45 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 910
Теперь функции дизеринга добавлены в buf2d, поэтому напишу здесь.
Я здесь http://board.kolibrios.org/viewtopic.php?f=32&t=2187&p=44785#p44810 писал, что иногда "тот фильтр вылетает".
Спойлер: Показать
Возьмём, например, dither_4.
Вызов происходит из buf_filter_dither:
Код:
proc buf_filter_dither, buffer:dword, algor:dword
; ...............................................
;edi - pointer to 24bit bitmap
;edx - x size
;esi - y size
lea   edx,[edx+edx*2]
imul  esi,edx
; ...............................................
call dither_4

Цикл ниже будет выполняться столько раз, сколько байтов содержится в bitmap.
Код:
dither_4:                       ; Atkinson algorithm
newp_4:                         ; Dithering cycle
; ...............................................
 .next:
    inc   edi
    dec   esi
    jnz   newp_4

В некоторый момент произойдёт обращение к памяти за пределами буфера bitmap:
Код:
  .ok:
    mov   [edi+3],al             ; putpixel
 
    movzx eax,byte[edi+edx]      ; pixel (x;y+1)
; ..........................................
  .ok1:
    mov   [edi+edx],al           ; putpixel
 
    movzx eax,byte[edi+6]        ; pixel (x+2;y)
; ..........................................
  .ok2:
    mov   [edi+6],al             ; putpixel
 
    movzx eax,byte[edi+edx-3]    ; pixel (x-1;y+1)
; ..........................................
  .ok3:
    mov   [edi+edx-3],al         ; putpixel
 
    movzx eax,byte[edi+edx+3]    ; pixel (x+1;y+1)
; ..........................................
  .ok4:
    mov   [edi+edx+3],al         ; putpixel
 
 
    movzx eax,byte[edi+edx+edx]    ; pixel (x;y+2)
; ..........................................
  .ok5:
    mov   [edi+edx+edx],al         ; putpixel


Вернуться к началу
СообщениеДобавлено: Пн июл 22, 2013 7:01 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт янв 27, 2006 3:06 pm
Сообщения: 1070
Хм, похоже на правду - как-то не сталкивался с падениями, потому не задумывался, как доберусь - поковыряюсь.


Вернуться к началу
СообщениеДобавлено: Сб окт 05, 2013 7:07 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт янв 27, 2006 3:06 pm
Сообщения: 1070
Как-то не могу придумать годного решения проблемы обращения к памяти за пределами буфера, кроме как вручную резервировать после буфера область, равную 2 строкам изображения. Может у кого лучше идеи есть?


Вернуться к началу
СообщениеДобавлено: Сб окт 05, 2013 7:44 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Heavyiron
А из-за чего возникает обращение за пределы буфера ?


Вернуться к началу
СообщениеДобавлено: Сб окт 05, 2013 9:40 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт янв 27, 2006 3:06 pm
Сообщения: 1070
Serge, обработка изображения идет попиксельно, а погрешность распределяется на соседние пиксели, расположенные в том числе и в нижних строках. В начале изображения и до предпредпоследней строки - все ок, но дальше алгоритм начинает писать в область за пределами последних пикселей. 0CodErr 2 постами выше привел пример в коде. Мутить проверку не находится ли пиксель в последних строках не хочется - думаю, это заметно замедлит код.


Вернуться к началу
СообщениеДобавлено: Сб окт 05, 2013 9:49 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Лучше всего выделить дополнительные строки.


Вернуться к началу
СообщениеДобавлено: Вс окт 06, 2013 8:28 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 910
Serge писал(а):
Лучше всего выделить дополнительные строки.
Для заранее неизвестного размера изображения придётся делать это динамически, что также может замедлить код.
Есть ещё такой вариант: применять фильтр не ко всему изображению, то есть начинать не с точки (0; 0), а с точки (1; 1) и заканчивать точкой (Width-2; Height-2), а не точкой (Width-1; Height-1). Мы не так много потеряем в качестве из-за каких-то двух строк.


Вернуться к началу
СообщениеДобавлено: Вс окт 06, 2013 12:41 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт янв 27, 2006 3:06 pm
Сообщения: 1070
0CodErr, в качестве будет незаметно, но изображение уже не будет 8-ми цветным, если какие-то пиксели не обработаны. Разве что цвета округлять, а ошибку не распределять для последних строк. Но тут опять впадаю в ступор по реализации этого дела


Вернуться к началу
СообщениеДобавлено: Вс окт 06, 2013 2:06 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Цитата:
Для заранее неизвестного размера изображения придётся делать это динамически, что также может замедлить код.
В смысле заранее неизвестного ? Там буфер фиксированного размера и если картинка больше, то всё, облом ?


Вернуться к началу
СообщениеДобавлено: Пн окт 07, 2013 2:22 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 910
Serge, там передаются в качестве параметров размеры и указатель на изображение(источник и он же приёмник). Не получится просто так «прилепить» туда дополнительный кусок памяти.


Вернуться к началу
СообщениеДобавлено: Пн окт 07, 2013 4:01 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 738
0CodErr писал(а):
Есть ещё такой вариант: применять фильтр не ко всему изображению, то есть начинать не с точки (0; 0), а с точки (1; 1) и заканчивать точкой (Width-2; Height-2), а не точкой (Width-1; Height-1). Мы не так много потеряем в качестве из-за каких-то двух строк.

Думаю можно на время работы функции поменять размер изображения (саму память для изображения не менять), а после окончания работы вернуть прежние размеры изображению.
0CodErr писал(а):
Не получится просто так «прилепить» туда дополнительный кусок памяти.

Функция buf2d_resize меняет размер изображения, также добавляя или убирая память выделенную под изображение.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 93 сообщения ]  На страницу Пред. 13 4 5 6 7 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB