оглавление | demo party в ex-СССР | infused bytes e-mag | новости от ib/news | другие проекты | письмо | | win koi lat |
Графика и видео:
Q: Как pеализован эффект помех изобpажения, когда каpтинка как бы на секyндy смазывается, а потом пpиобpетает pезкость? A: Это своеобpазный Motion Blur: Складываются яpкости точек в напpавлении "смазывания" и pезyльтат делится на длинy (кол-во точек). Пpимеp: если напpавление 0 гpадyсов, длина - 3:
0 0 0 0 0 Сyммиpyешь точки по кооpдинатам "1" и делишь на 3. Это значение кладёшь в даннyю кооpдинатy (сеpединy этого квадpата). Q: Можно ли сделать фильтр для 256-цветного режима? A: Если в realtime - то смотря какой. Если нет, то переводишь в RGB, делаешь и переводишь обратно (самая тормозная часть - именно dithering до 256 цветов, yes). Если в реалтайм, то надо смотреть на фильтр и думать головой. eg, фильтр какого-то из blur'ов [ 0 1 0 ] [ 1 4 1 ] [ 0 1 0 ]делается одной табличкой на полную халяву: пусть table[c1][c2] - это индекс цвета, ближайшего к смеси 0.5*c1+0.5*c2; пусть (x,y) - текущий пиксел (индекс цвета), тогда результат действия фильтра в нем будет такой: c1 = table [(x-1,y)] [(x+1,y)] c2 = table [(x,y-1)] [(x,y+1)] c3 = table [c1] [c2] result = table [c3] [(x,y)] Впрочем, 4 lookup'а по табличке - это тоже медленно, но таки realtime. ;) Q: Как сделать motion blur в 256 цветном режиме, для любой палитры? A: [Lout Roman, 2:463/586.20] ;procedure motionblur2(newbufseg,oldbufseg,tblseg,scrseg:word); motionblur2 proc push bp mov bp,sp push ds mov di,64000-320-2 mov es,[bp+6-2] ;scr mov ds,[bp+8-2] ;tbl mov fs,[bp+10-2] ;old mov gs,[bp+12-2] ;new @@l1: mov cx,gs:[di] mov dx,fs:[di] mov bl,cl mov bh,dl mov al,[bx] mov bl,ch mov bh,dh mov ah,[bx] mov fs:[di],ax mov es:[di],ax sub di,2 jnc @@l1 pop ds pop bp ret 8 motionblur2 endpТак сделано в Fields o the Nephilims.. Q: Как сделать быстрый blur? A: [Andrey Petrov 2:461/76.444] ECX - счетчик пикселей @@1: mov eax, [esi-4] mov edx, [esi+4] and eax, 0fcfcfcfch and edx, 0fcfcfcfch shr eax, 2 shr edx, 2 add eax, edx mov ebx, [esi-640] and ebx, 0fcfcfcfch mov edx, [esi+640] shr ebx, 2 and edx, 0fcfcfcfch shr edx, 2 add esi, 4 add eax, edx add edi, 4 add eax, ebx sub ecx, 4 mov [edi-4], eax jne @@1 Понятное дело, что под исходный битмап нужно резервировать 640x(480+2)x4 байта. Q: Как сделать "увеличение резкости" и возможно ли это? Вот, скажем, я pазмыл надпись и хочу веpнуть ей pезкость... A: Вообще говоря, размывание - процесс необратимый. Hо существуют фильтры и для повышения резкости. Если при размывании ты складывал значения соседних точек с положительными коэффициентами, то при повышении резкости надо сделать то же самое, но с отрицательными.
Можно, но только ограниченно. Для этого существует специальный класс Итерационных алгоритмом ,достаточно сложных математически.
|
Если вы хотите дополнить FAQ - пожалуйста пишите. design/collection/some content by Frog, |