15,6 → 15,7 |
buf2d_data equ dword[edi] ;¤ ë¥ ¡ãä¥à ¨§®¡à ¦¥¨ï |
buf2d_w equ dword[edi+8] ;è¨à¨ ¡ãä¥à |
buf2d_h equ dword[edi+12] ;¢ëá®â ¡ãä¥à |
buf2d_l equ word[edi+4] |
buf2d_t equ word[edi+6] ;®âáâ㯠ᢥàåã |
buf2d_size_lt equ dword[edi+4] ;®âáâ㯠᫥¢ ¨ á¯à ¢ ¤«ï ¡ãä¥à |
buf2d_color equ dword[edi+16] ;梥â ä® ¡ãä¥à |
196,8 → 197,14 |
ret |
endp |
|
;äãªæ¨ï ¤«ï ®¡à¥§ ¨ï ¡ãä¥à®¢ 8 ¨ 24 ¡¨âëå, ¯® § ¤ ®¬ã 梥âã. |
;¯ à ¬¥âà opt § ¤ ¥âáï ª®¬¡¨ 樥© ª®áâ â: |
; BUF2D_OPT_CROP_TOP - ®¡à¥§ª ᢥàåã |
; BUF2D_OPT_CROP_LEFT - ®¡à¥§ª á«¥¢ |
; BUF2D_OPT_CROP_BOTTOM - ®¡à¥§ª ᨧã |
; BUF2D_OPT_CROP_RIGHT - ®¡à¥§ª á¯à ¢ |
align 4 |
proc buf_crop_color, buf_struc:dword, color:dword, opt:dword ;®¡à¥§ª ¡ãä¥à ¯® § ¤ ®¬ã 梥⮬ 梥âã |
proc buf_crop_color, buf_struc:dword, color:dword, opt:dword |
locals |
crop_r dd ? |
endl |
305,14 → 312,14 |
add esi,buf2d_data ;esi - 㪠§ â¥«ì ª®¥æ ¡ãä¥à ¨§®¡à ¦¥¨ï |
mov dword[crop_r],0 |
cld |
.found_beg: |
.24found_beg_right: |
sub esi,3 ;¤¢¨£ ¥¬áï 1-ã ª®«®ªã ¢«¥¢® |
mov ecx,buf2d_h ;¢®ááâ ®¢«¥¨¥ ecx ¤«ï ®¢®£® 横« |
@@: |
cmp word[esi],ax |
jne .found |
jne .24found_right |
cmp byte[esi+2],dl |
jne .found |
jne .24found_right |
sub esi,ebx ;¯àë£ ¥¬ ¢¥àåîî áâபã |
loop @b |
inc dword[crop_r] |
320,7 → 327,7 |
mov ecx,buf2d_w |
dec ecx ;1 ª®«®ª § ¯ á |
cmp dword[crop_r],ecx |
jge .found |
jge .24found_right |
|
sub esi,3 ;¤¢¨£ ¥¬áï 1-ã ª®«®ªã ¢«¥¢® |
mov ecx,buf2d_h ;¢®ááâ ®¢«¥¨¥ ecx ¤«ï ®¢®£® 横« |
327,9 → 334,9 |
@@: |
add esi,ebx ;¯àë£ ¥¬ ¨¦îî áâபã |
cmp word[esi],ax |
jne .found |
jne .24found_right |
cmp byte[esi+2],dl |
jne .found |
jne .24found_right |
loop @b |
inc dword[crop_r] |
|
336,14 → 343,14 |
mov ecx,buf2d_w |
dec ecx ;1 ª®«®ª § ¯ á |
cmp dword[crop_r],ecx |
jl .found_beg |
jl .24found_beg_right |
|
.found: |
.24found_right: |
cmp dword[crop_r],0 |
je .24no_crop_right |
mov ecx,buf2d_w |
sub ecx,dword[crop_r] |
stdcall img_rgb_wcrop, buf2d_data, buf2d_w, ecx, buf2d_h ;®¡à¥§ ¥¬ ¡ãä¥à, ¯® ®¢®¬ã à §¬¥àã |
stdcall img_rgb_crop_r, buf2d_data, buf2d_w, ecx, buf2d_h ;®¡à¥§ ¥¬ ¡ãä¥à, ¯® ®¢®¬ã à §¬¥àã |
mov buf2d_w,ecx ;áâ ¢¨¬ ®¢ãî è¨à¨ã ¤«ï ¡ãä¥à |
mov ebx,buf2d_h |
imul ecx,ebx |
352,6 → 359,66 |
mov buf2d_data,eax ; á«ãç © ¥á«¨ ¨§¬¥¨«áï 㪠§ â¥«ì ¤ ë¥ |
.24no_crop_right: |
|
bt dword[opt],BUF2D_BIT_OPT_CROP_LEFT |
jae .24no_crop_left |
mov eax,dword[color] |
mov edx,eax ;ax = colors - r,g |
shr edx,16 ;dl = color - b |
mov ebx,buf2d_w |
lea ebx,[ebx+ebx*2] |
mov esi,buf2d_data ;esi - 㪠§ ⥫ì 箫® ¡ãä¥à ¨§®¡à ¦¥¨ï |
mov dword[crop_r],0 |
cld |
.24found_beg_left: |
|
mov ecx,buf2d_h ;¢®ááâ ®¢«¥¨¥ ecx ¤«ï ®¢®£® 横« |
@@: |
cmp word[esi],ax |
jne .24found_left |
cmp byte[esi+2],dl |
jne .24found_left |
add esi,ebx ;¯àë£ ¥¬ ¨¦îî áâபã |
loop @b |
inc dword[crop_r] |
add esi,3 ;¤¢¨£ ¥¬áï 1-ã ª®«®ªã ¢¯à ¢® |
|
mov ecx,buf2d_w |
dec ecx ;1 ª®«®ª § ¯ á |
cmp dword[crop_r],ecx |
jge .24found_left |
|
mov ecx,buf2d_h ;¢®ááâ ®¢«¥¨¥ ecx ¤«ï ®¢®£® 横« |
@@: |
sub esi,ebx ;¯àë£ ¥¬ ¢¥àåîî áâபã |
cmp word[esi],ax |
jne .24found_left |
cmp byte[esi+2],dl |
jne .24found_left |
loop @b |
inc dword[crop_r] |
add esi,3 ;¤¢¨£ ¥¬áï 1-ã ª®«®ªã ¢¯à ¢® |
|
mov ecx,buf2d_w |
dec ecx ;1 ª®«®ª § ¯ á |
cmp dword[crop_r],ecx |
jl .24found_beg_left |
|
.24found_left: |
cmp dword[crop_r],0 |
je .24no_crop_left |
mov ecx,buf2d_w |
sub ecx,dword[crop_r] |
stdcall img_rgb_crop_l, buf2d_data, buf2d_w, ecx, buf2d_h ;®¡à¥§ ¥¬ ¡ãä¥à, ¯® ®¢®¬ã à §¬¥àã |
mov buf2d_w,ecx ;áâ ¢¨¬ ®¢ãî è¨à¨ã ¤«ï ¡ãä¥à |
mov ebx,buf2d_h |
imul ecx,ebx |
lea ecx,[ecx+ecx*2] |
invoke mem.realloc,buf2d_data,ecx |
mov buf2d_data,eax ; á«ãç © ¥á«¨ ¨§¬¥¨«áï 㪠§ â¥«ì ¤ ë¥ |
mov eax,dword[crop_r] |
add buf2d_l,ax |
.24no_crop_left: |
|
.24end_f: |
|
|
479,7 → 546,7 |
je .8no_crop_right |
mov ecx,buf2d_w |
sub ecx,edx |
stdcall img_gray_wcrop, buf2d_data, buf2d_w, ecx, buf2d_h ;®¡à¥§ ¥¬ ¡ãä¥à, ¯® ®¢®¬ã à §¬¥àã |
stdcall img_gray_crop_r, buf2d_data, buf2d_w, ecx, buf2d_h ;®¡à¥§ ¥¬ ¡ãä¥à, ¯® ®¢®¬ã à §¬¥àã |
mov buf2d_w,ecx ;áâ ¢¨¬ ®¢ãî è¨à¨ã ¤«ï ¡ãä¥à |
mov ebx,buf2d_h |
imul ecx,ebx |
487,6 → 554,58 |
mov buf2d_data,eax ; á«ãç © ¥á«¨ ¨§¬¥¨«áï 㪠§ â¥«ì ¤ ë¥ |
.8no_crop_right: |
|
bt dword[opt],BUF2D_BIT_OPT_CROP_LEFT |
jae .8no_crop_left |
mov eax,dword[color] |
mov ebx,buf2d_w |
mov esi,buf2d_data ;esi - 㪠§ ⥫ì 箫® ¡ãä¥à ¨§®¡à ¦¥¨ï |
mov edx,0 |
cld |
.8found_beg_left: |
|
mov ecx,buf2d_h ;¢®ááâ ®¢«¥¨¥ ecx ¤«ï ®¢®£® 横« |
@@: |
cmp word[esi],ax |
jne .8found_left |
add esi,ebx ;¯àë£ ¥¬ ¨¦îî áâபã |
loop @b |
inc edx |
inc esi ;¤¢¨£ ¥¬áï 1-ã ª®«®ªã ¢¯à ¢® |
|
mov ecx,buf2d_w |
dec ecx ;1 ª®«®ª § ¯ á |
cmp edx,ecx |
jge .8found_left |
|
mov ecx,buf2d_h ;¢®ááâ ®¢«¥¨¥ ecx ¤«ï ®¢®£® 横« |
@@: |
sub esi,ebx ;¯àë£ ¥¬ ¢¥àåîî áâபã |
cmp word[esi],ax |
jne .8found_left |
loop @b |
inc edx |
inc esi ;¤¢¨£ ¥¬áï 1-ã ª®«®ªã ¢¯à ¢® |
|
mov ecx,buf2d_w |
dec ecx ;1 ª®«®ª § ¯ á |
cmp edx,ecx |
jl .8found_beg_left |
|
.8found_left: |
cmp edx,0 |
je .8no_crop_left |
mov ecx,buf2d_w |
sub ecx,edx |
stdcall img_gray_crop_l, buf2d_data, buf2d_w, ecx, buf2d_h ;®¡à¥§ ¥¬ ¡ãä¥à, ¯® ®¢®¬ã à §¬¥àã |
mov buf2d_w,ecx ;áâ ¢¨¬ ®¢ãî è¨à¨ã ¤«ï ¡ãä¥à |
mov ebx,buf2d_h |
imul ecx,ebx |
invoke mem.realloc,buf2d_data,ecx |
mov buf2d_data,eax ; á«ãç © ¥á«¨ ¨§¬¥¨«áï 㪠§ â¥«ì ¤ ë¥ |
mov eax,edx |
add buf2d_l,ax |
.8no_crop_left: |
|
.8end_f: |
|
popad |
493,6 → 612,7 |
ret |
endp |
|
;®¡à¥§ ¥¬ 梥⮥ ¨§®¡à ¦¥¨¥ á ¯à ¢®© áâ®à®ë |
;input: |
;data_rgb - pointer to rgb data |
;size_w_old - width img in pixels |
499,7 → 619,7 |
;size_w_new - new width img in pixels |
;size_h - height img in pixels |
align 4 |
proc img_rgb_wcrop, data_rgb:dword, size_w_old:dword, size_w_new:dword, size_h:dword |
proc img_rgb_crop_r, data_rgb:dword, size_w_old:dword, size_w_new:dword, size_h:dword |
pushad |
mov eax, dword[size_w_old] |
lea eax, dword[eax+eax*2] ;eax = width(old) * 3(rgb) |
525,6 → 645,7 |
ret |
endp |
|
;®¡à¥§ ¥¬ á¥à®¥ ¨§®¡à ¦¥¨¥ á ¯à ¢®© áâ®à®ë |
;input: |
;data_gray - pointer to gray data |
;size_w_old - width img in pixels |
531,7 → 652,7 |
;size_w_new - new width img in pixels |
;size_h - height img in pixels |
align 4 |
proc img_gray_wcrop, data_gray:dword, size_w_old:dword, size_w_new:dword, size_h:dword |
proc img_gray_crop_r, data_gray:dword, size_w_old:dword, size_w_new:dword, size_h:dword |
pushad |
mov eax, dword[size_w_old] |
mov ebx, dword[size_w_new] |
555,6 → 676,68 |
ret |
endp |
|
;®¡à¥§ ¥¬ 梥⮥ ¨§®¡à ¦¥¨¥ á «¥¢®© áâ®à®ë |
;input: |
;data_rgb - pointer to rgb data |
;size_w_old - width img in pixels |
;size_w_new - new width img in pixels |
;size_h - height img in pixels |
align 4 |
proc img_rgb_crop_l, data_rgb:dword, size_w_old:dword, size_w_new:dword, size_h:dword |
pushad |
mov edi,dword[data_rgb] |
mov esi,edi |
mov eax,dword[size_w_old] |
mov ebx,dword[size_w_new] |
cmp eax,ebx |
jle .end_f ;áâ àë© à §¬¥à ¨§®¡à ¦¥¨ï ¥ ¬®¦¥â ¡ëâì ¬¥ìè¥ ®¢®£® (¯à¨ ãá«®¢¨¨ ®¡à¥§ ¨ï ª à⨪¨) |
lea eax,[eax+eax*2] |
lea ebx,[ebx+ebx*2] |
sub eax,ebx |
mov edx,dword[size_h] ;¢ëá®â ¨§®¡à ¦¥¨ï |
cld |
@@: |
add esi,eax |
mov ecx,ebx |
rep movsb |
dec edx |
cmp edx,0 |
jg @b |
.end_f: |
popad |
ret |
endp |
|
;®¡à¥§ ¥¬ á¥à®¥ ¨§®¡à ¦¥¨¥ á «¥¢®© áâ®à®ë |
;input: |
;data_gray - pointer to gray data |
;size_w_old - width img in pixels |
;size_w_new - new width img in pixels |
;size_h - height img in pixels |
align 4 |
proc img_gray_crop_l, data_gray:dword, size_w_old:dword, size_w_new:dword, size_h:dword |
pushad |
mov edi,dword[data_gray] |
mov esi,edi |
mov eax,dword[size_w_old] |
mov ebx,dword[size_w_new] |
cmp eax,ebx |
jle .end_f ;áâ àë© à §¬¥à ¨§®¡à ¦¥¨ï ¥ ¬®¦¥â ¡ëâì ¬¥ìè¥ ®¢®£® (¯à¨ ãá«®¢¨¨ ®¡à¥§ ¨ï ª à⨪¨) |
sub eax,ebx |
mov edx,dword[size_h] ;¢ëá®â ¨§®¡à ¦¥¨ï |
cld |
@@: |
add esi,eax |
mov ecx,ebx |
rep movsb |
dec edx |
cmp edx,0 |
jg @b |
.end_f: |
popad |
ret |
endp |
|
;hoffs - ª®««¨ç¥á⢮ ¯¨ªá¥«¥© ª®âàë¥ ¯®¤¨¬ ¥âáï/®¯ã᪠¥âáï ¨§®¡à ¦¥¨¥ |
;img_t - ¢ëá®â , á ª®â®à®© ç¨ ¥âáï ¤¢¨£ îé ïáï ç áâì ¨§®¡à ¦¥¨ï |
align 4 |