Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3105 → Rev 3104

/programs/develop/libraries/buf2d/trunk/about.htm
63,7 → 63,6
<li><a href="#f_b_wdiv2">buf2d_img_wdiv2</a></li>
<li><a href="#f_c_color">buf2d_crop_color</a></li>
<li><a href="#f_flip_v">buf2d_flip_v</a></li>
<li><a href="#f_filter_d">buf2d_filter_dither</a></li>
 
<li><a href="#f_v_brush_c">buf2d_vox_brush_create</a></li>
</ul>
261,12 → 260,6
<pre>stdcall buf2d_flip_v, buf_0</pre>
<p>ãäå buf_0 - ñòðóêòóðà 24-õ áèòíîãî áóôåðà.</p>
 
<h4><a name="f_filter_d">buf2d_filter_dither</a></h4>
<p>Ôèëüòð, êîòîðûé ïðåîáðàçóåò èçîáðàæåíèå èç 24 áèòíîãî áóôåðà â 8-ìè öâåòíîå. Ðàçðÿäíîñòü áóôåðà íå ìåíÿåòñÿ. Ïðèìåð:</p>
<pre>stdcall [buf2d_filter_dither], buf_0, 0</pre>
<p>ãäå buf_0 - ñòðóêòóðà 24-õ áèòíîãî áóôåðà.</p>
<p>0 - àëãîðèòì (âîçìîæíûå çíà÷åíèÿ: 0 - Sierra Lite, 1 - Floyd-Steinberg, 2 - Burkers).</p>
 
<h4><a name="f_v_brush_c">buf2d_vox_brush_create</a></h4>
<p>Ñîçäàíèå âîêñåëüíîé êèñòè. Ïðèìåð:</p>
<pre>stdcall [buf2d_vox_brush_create], buf_vox, vox_6_7_z
360,7 → 353,6
buf2d_set_pixel dd sz_buf2d_set_pixel
buf2d_get_pixel dd sz_buf2d_get_pixel
buf2d_flip_v dd sz_buf2d_flip_v
buf2d_filter_dither dd sz_buf2d_filter_dither
 
;âîêñåëüíûå ôóíêöèè:
buf2d_vox_brush_create dd sz_buf2d_vox_brush_create
404,7 → 396,6
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
sz_buf2d_get_pixel db 'buf2d_get_pixel',0
sz_buf2d_flip_v db 'buf2d_flip_v',0
sz_buf2d_filter_dither db 'buf2d_filter_dither',0
 
;âîêñåëüíûå ôóíêöèè:
sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
443,6 → 434,5
<p>11.08.12 - ôóíêöèè äëÿ ñæàòèÿ èçîáðàæåíèé buf2d_img_hdiv2 è buf2d_img_wdiv2 ðàáîòàþò ñ 32 áèòíûìè áóôåðàìè.</p>
<p>01.10.12 - äîáàâëåíà ôóíêöèÿ ïîâîðîòà èçîáðàæåíèé íà 90 è 180 ãðàäóñîâ buf2d_rotate.</p>
<p>15.11.12 - äîáàâëåíà ôóíêöèÿ îòðàæåíèÿ 24 áèòíûõ èçîáðàæåíèé ïî âåðòèêàëè buf_flip_v, èñïðàâëåíèÿ â ôóíêöèè buf2d_img_hdiv2.</p>
<p>14.12.12 - äîáàâëåíà ôóíêöèÿ íàëîæåíèÿ ôèëüòðà buf2d_filter_dither.</p>
</body>
</html>
/programs/develop/libraries/buf2d/trunk/buf2d.asm
3451,298 → 3451,8
ret
endp
 
;䨫ìâ¥à
align 4
proc buf_filter_dither, buffer:dword, algor:dword
pushad
mov edi,[buffer]
cmp buf2d_bits,24
jne .error
mov edx,buf2d_w
mov esi,buf2d_h
mov edi,buf2d_data
;edi - pointer to 24bit bitmap
;edx - x size
;esi - y size
lea edx,[edx*3]
imul esi,edx
 
;®¯à¥¤¥«ï¥¬ ª ª®©  «£®à¨â¬ ¨á¯®«ì§®¢ âì
cmp dword[algor],0
jne @f
call dither_0
jmp .dither_end
@@:
cmp dword[algor],1
jne @f
call dither_1
jmp .dither_end
@@:
call dither_2
jmp .dither_end
.error:
stdcall print_err,sz_buf2d_filter_dither,txt_err_n24b
.dither_end:
popad
ret
endp
 
align 16
dither_0: ; Sierra Filter Lite algoritm
newp_0: ; Dithering cycle
xor ebx,ebx ; At first threshold
movzx ecx,byte[edi]
cmp cl,255
je newp_0.next
test cl,cl
jz newp_0.next
jns @f
dec ebx
sub ecx,255
@@:
mov [edi],bl ; putpixel
 
sar ecx,1 ; error/2
;adc ecx,0 ; round to integer
 
movzx eax,byte[edi+3] ; pixel (x+1;y)
add eax,ecx ; add error/2 to (x+1;y)
jge @f ; check_overflow
xor eax,eax
jmp .ok
@@:
cmp eax,255
jle .ok
or al,255
.ok:
mov [edi+3],al ; putpixel
 
sar ecx,1 ; error/4
adc ecx,0 ; round to integer
 
movzx eax,byte[edi+edx-3] ; pixel (x-1;y+1)
add eax,ecx ; add error/4 to (x-1;y+1)
jge @f ; check_overflow
xor eax,eax
jmp .ok1
@@:
cmp eax,255
jle .ok1
or al,255
.ok1:
mov [edi+edx-3],al ; putpixel
 
movzx eax,byte[edi+edx] ; pixel (x;y+1)
add eax,ecx ; add error/4 to (x;y+1)
jge @f ; check_overflow
xor eax,eax
jmp .ok2
@@:
cmp eax,255
jle .ok2
or al,255
.ok2:
mov [edi+edx],al ; putpixel
 
.next:
inc edi
dec esi
jnz newp_0
ret
 
align 16
dither_1: ; Floyd-Steinberg algoritm
newp_1: ; Dithering cycle
xor ebx,ebx ; At first threshold
movzx ecx,byte[edi]
cmp cl,255
je newp_1.next
test cl,cl
jz newp_1.next
jns @f
dec ebx
sub ecx,255
@@:
mov [edi],bl ; putpixel
 
sar ecx,4 ; error/16
adc ecx,0 ; round to integer
mov ebx,ecx
 
movzx eax,byte[edi+edx+3] ; pixel (x+1;y+1)
add eax,ecx ; add error/16 to (x+1;y+1)
jge @f ; check_overflow
xor eax,eax
jmp .ok
@@:
cmp eax,255
jle .ok
or al,255
.ok:
mov [edi+edx+3],al ;putpixel
 
imul ecx,3
movzx eax,byte[edi+edx-3] ; pixel (x-1;y+1)
add eax,ecx ; add 3*error/16 to (x-1;y+1)
jge @f ; check_overflow
xor eax,eax
jmp .ok1
@@:
cmp eax,255
jle .ok1
or al,255
.ok1:
mov [edi+edx-3],al ;putpixel
 
mov ecx,ebx
imul ecx,5
movzx eax,byte[edi+edx] ; pixel (x;y+1)
add eax,ecx ; add 5*error/16 to (x;y+1)
jge @f ; check_overflow
xor eax,eax
jmp .ok2
@@:
cmp eax,255
jle .ok2
or al,255
.ok2:
mov [edi+edx],al ;putpixel
 
mov ecx,ebx
imul ecx,7
movzx eax,byte[edi+3] ; pixel (x+1;y)
add eax,ecx ; add 7*error/16 to (x+1;y)
jge @f ; check_overflow
xor eax,eax
jmp .ok3
@@:
cmp eax,255
jle .ok3
or al,255
.ok3:
mov [edi+3],al ;putpixel
 
.next:
inc edi
dec esi
jnz newp_1
ret
 
align 16
dither_2: ; Burkers algoritm
newp_2: ; Dithering cycle
xor ebx,ebx ; At first threshold
movsx ecx,byte[edi]
cmp cl,255
je newp_2.next
test cl,cl
jz newp_2.next
jns @f
dec ebx
@@:
mov [edi],bl ; putpixel
 
sar ecx,2 ; error/4
adc ecx,0 ; round to integer
 
movzx eax,byte[edi+3] ; pixel (x+1;y)
add eax,ecx ; add error/4 to (x+1;y)
jge @f ; check_overflow
xor eax,eax
jmp .ok
@@:
cmp eax,255
jle .ok
or al,255
.ok:
mov [edi+3],al ; putpixel
 
movzx eax,byte[edi+edx] ; pixel (x;y+1)
add eax,ecx ; add error/4 to (x;y+1)
jge @f ; check_overflow
xor eax,eax
jmp .ok1
@@:
cmp eax,255
jle .ok1
or al,255
.ok1:
mov [edi+edx],al ; putpixel
 
sar ecx,1 ; error/8
adc ecx,0 ; round to integer
 
movzx eax,byte[edi+6] ; pixel (x+2;y)
add eax,ecx ; add error/8 to (x+2;y)
jge @f ; check_overflow
xor eax,eax
jmp .ok2
@@:
cmp eax,255
jle .ok2
or al,255
.ok2:
mov [edi+6],al ; putpixel
 
movzx eax,byte[edi+edx-3] ; pixel (x-1;y+1)
add eax,ecx ; add error/8 to (x-1;y+1)
jge @f ; check_overflow
xor eax,eax
jmp .ok3
@@:
cmp eax,255
jle .ok3
or al,255
.ok3:
mov [edi+edx-3],al ; putpixel
 
movzx eax,byte[edi+edx+3] ; pixel (x+1;y+1)
add eax,ecx ; add error/8 to (x+1;y+1)
jge @f ; check_overflow
xor eax,eax
jmp .ok4
@@:
cmp eax,255
jle .ok4
or al,255
.ok4:
mov [edi+edx+3],al ; putpixel
 
sar ecx,1 ; error/16
;adc ecx,0 ; round to integer
 
movzx eax,byte[edi+edx-6] ; pixel (x-2;y+1)
add eax,ecx ; add error/16 to (x-2;y+1)
jge @f ; check_overflow
xor eax,eax
jmp .ok5
@@:
cmp eax,255
jle .ok5
or al,255
.ok5:
mov [edi+edx-6],al ; putpixel
 
movzx eax,byte[edi+edx+6] ; pixel (x+2;y+1)
add eax,ecx ; add error/16 to (x+2;y+1)
jge @f ; check_overflow
xor eax,eax
jmp .ok6
@@:
cmp eax,255
jle .ok6
or al,255
.ok6:
mov [edi+edx+6],al ; putpixel
 
.next:
inc edi
dec esi
jnz newp_2
ret
 
 
 
;*** ä㭪樨 ¤«ï à ¡®âë á ¢®ªá¥«ì­®© £à ä¨ª®© ***
 
 
5106,7 → 4816,6
dd sz_buf2d_set_pixel, buf_set_pixel
dd sz_buf2d_get_pixel, buf_get_pixel
dd sz_buf2d_flip_v, buf_flip_v
dd sz_buf2d_filter_dither, buf_filter_dither
dd sz_buf2d_vox_brush_create, vox_brush_create
dd sz_buf2d_vox_brush_delete, vox_brush_delete
dd sz_buf2d_vox_obj_get_img_w_3g, buf_vox_obj_get_img_w_3g
5147,7 → 4856,6
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
sz_buf2d_get_pixel db 'buf2d_get_pixel',0
sz_buf2d_flip_v db 'buf2d_flip_v',0
sz_buf2d_filter_dither db 'buf2d_filter_dither',0
sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0
/programs/develop/libraries/buf2d/trunk/examples/e8_filters.asm
File deleted
/programs/develop/libraries/buf2d/trunk/examples/build.bat
16,7 → 16,6
@fasm.exe -m 16384 e5_lines_sm.asm bin\e5_lines_sm.kex
@fasm.exe -m 16384 e6_vox_1g.asm bin\e6_vox_1g.kex
@fasm.exe -m 16384 e7_vox_3g.asm bin\e7_vox_3g.kex
@fasm.exe -m 16384 e8_filters.asm bin\e8_filters.kex
 
@kpack bin\e0_dr_lines.kex
@kpack bin\e1_scaling.kex
26,5 → 25,4
@kpack bin\e5_lines_sm.kex
@kpack bin\e6_vox_1g.kex
@kpack bin\e7_vox_3g.kex
@kpack bin\e8_filters.kex
pause
/programs/develop/libraries/buf2d/trunk/examples/e6_vox_1g.asm
10,7 → 10,7
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../develop/libraries/box_lib/load_lib.mac'
include '../../../../../dll.inc'
include 'mem.inc'
 
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
 
/programs/develop/libraries/buf2d/trunk/examples/e7_vox_3g.asm
10,7 → 10,7
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../develop/libraries/box_lib/load_lib.mac'
include '../../../../../dll.inc'
include 'mem.inc'
 
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
 
/programs/develop/libraries/buf2d/trunk/examples/e5_lines_sm.asm
10,7 → 10,7
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../develop/libraries/box_lib/load_lib.mac'
include '../../../../../dll.inc'
include 'mem.inc'
 
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
 
/programs/develop/libraries/buf2d/trunk/examples/e0_dr_lines.asm
10,7 → 10,7
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../develop/libraries/box_lib/load_lib.mac'
include '../../../../../dll.inc'
include 'mem.inc'
 
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
 
/programs/develop/libraries/buf2d/trunk/examples/e1_scaling.asm
10,7 → 10,7
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../develop/libraries/box_lib/load_lib.mac'
include '../../../../../dll.inc'
include 'mem.inc'
 
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
 
/programs/develop/libraries/buf2d/trunk/examples/e4_graf_ed.asm
10,7 → 10,7
include '../../../../../macros.inc'
include '../../../../../proc32.inc'
include '../../../../../develop/libraries/box_lib/load_lib.mac'
include '../../../../../dll.inc'
include 'mem.inc'
 
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load