Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 3052 → Rev 3053

/programs/develop/libraries/libs-dev/.test/004/gray_5x7.tiff
Cannot display: file marked as a binary type.
svn:mime-type = image/tiff
Property changes:
Deleted: svn:mime-type
-image/tiff
\ No newline at end of property
/programs/develop/libraries/libs-dev/.test/004/rgb_lzw_le_2x2.tiff
Cannot display: file marked as a binary type.
svn:mime-type = image/tiff
Property changes:
Added: svn:mime-type
+image/tiff
\ No newline at end of property
/programs/develop/libraries/libs-dev/.test/004/test004.asm
110,18 → 110,12
inc edx
 
mov ebx, [image_initial]
; invoke img.scale, ebx, 1, 2, 5, 5, 0, LIBIMG_SCALE_TYPE_STRETCH, LIBIMG_SCALE_ALG_BILINEAR, edx, ecx
; invoke img.scale, ebx, 1, 2, 5, 5, 0, LIBIMG_SCALE_TYPE_STRETCH, LIBIMG_SCALE_ALG_INTEGER, 3, 3
invoke img.scale, ebx, 0, 0, [ebx + Image.Width], [ebx + Image.Height], 0, LIBIMG_SCALE_TYPE_STRETCH, LIBIMG_SCALE_ALG_BILINEAR, edx, ecx
; invoke img.scale, ebx, 0, 0, [ebx + Image.Width], [ebx + Image.Height], 0, LIBIMG_SCALE_INTEGER, LIBIMG_INTER_NONE, 5, 5
; invoke img.scale, ebx, 1, 2, 5, 5, 0, LIBIMG_SCALE_TILE, LIBIMG_INTER_NONE, edx, ecx
; invoke img.scale, ebx, 0, 0, [ebx + Image.Width], [ebx + Image.Height], 0, LIBIMG_SCALE_TILE, LIBIMG_INTER_NONE, edx, ecx
; invoke img.scale, ebx, 1, 2, 5, 5, 0, LIBIMG_SCALE_STRETCH, LIBIMG_INTER_BILINEAR, edx, ecx
invoke img.scale, ebx, 0, 0, [ebx + Image.Width], [ebx + Image.Height], 0, LIBIMG_SCALE_STRETCH, LIBIMG_INTER_BILINEAR, edx, ecx
 
; proc img.scale _src, _crop_x, _crop_y, _crop_width, _crop_height, _dst, _scale_type, _scale_alg, _param1, _param2
; see libimg.inc for available scale types and algorithms
; LIBIMG_SCALE_ALG_BILINEAR: _param1, _param2 -- width and height of rectangle to fit _src image to
; LIBIMG_SCALE_ALG_INTEGER: _param1 -- scale factor (i.e. 3 means scaling 7x7 to 21x21); _param2 ignored
; LIBIMG_SCALE_TYPE_*: just try and see, they are common STRETCH, FIT_BY_WIDTH etc.
; returns pointer to a scaled image
 
; invoke img.scale, ebx, 0, 0, [ebx + Image.Width], [ebx + Image.Height], 0, LIBIMG_SCALE_TYPE_STRETCH, LIBIMG_SCALE_ALG_INTEGER, 3, 3
test eax, eax
jz exit
mov [image_scaled], eax
134,17 → 128,18
;-----------------------------------------------------------------------------
 
window_title db 'img.scale example',0
 
input_file db '/hd0/1/gray_5x7.tiff',0
;input_file db '/hd0/1/grayscale_123x123.tiff',0
;input_file db '/hd0/1/grayscale_357x357.tiff',0
;input_file db '/hd0/1/grayscale_620x620.tiff',0
;input_file db '/hd0/1/rgb_220.jpg',0
;input_file db '/hd0/1/rgba_217.tiff',0
;input_file db '/hd0/1/rgb_7x9.tiff',0
;input_file db '/hd0/1/rgba_7x9.tiff',0
;input_file db '/hd0/1/gray_7x9.tiff',0
;input_file db '/hd0/1/rgb_70x90.png',0
input_file:
; db '/hd0/1/gray_5x7.tiff',0
db '/hd0/1/rgb_lzw_le_2x2.tiff',0
; db '/hd0/1/grayscale_123x123.tiff',0
; db '/hd0/1/grayscale_357x357.tiff',0
; db '/hd0/1/grayscale_620x620.tiff',0
; db '/hd0/1/rgb_220.jpg',0
; db '/hd0/1/rgba_217.tiff',0
; db '/hd0/1/rgb_7x9.tiff',0
; db '/hd0/1/rgba_7x9.tiff',0
; db '/hd0/1/gray_7x9.tiff',0
; db '/hd0/1/rgb_70x90.png',0
;-----------------------------------------------------------------------------
 
align 4
/programs/develop/libraries/libs-dev/libimg/libimg.asm
1914,19 → 1914,19
 
align 4
img.formats_table:
.bmp dd LIBIMG_FORMAT_ID_BMP, img.is.bmp, img.decode.bmp, img.encode.bmp, 1 + (1 SHL Image.bpp24) + (1 SHL Image.bpp32)
.ico dd LIBIMG_FORMAT_ID_ICO, img.is.ico, img.decode.ico_cur, img.encode.ico, 0
.cur dd LIBIMG_FORMAT_ID_CUR, img.is.cur, img.decode.ico_cur, img.encode.cur, 0
.gif dd LIBIMG_FORMAT_ID_GIF, img.is.gif, img.decode.gif, img.encode.gif, 0
.png dd LIBIMG_FORMAT_ID_PNG, img.is.png, img.decode.png, img.encode.png, 0
.jpg dd LIBIMG_FORMAT_ID_JPEG, img.is.jpg, img.decode.jpg, img.encode.jpg, 0
.tga dd LIBIMG_FORMAT_ID_TGA, img.is.tga, img.decode.tga, img.encode.tga, 0
.pcx dd LIBIMG_FORMAT_ID_PCX, img.is.pcx, img.decode.pcx, img.encode.pcx, 0
.xcf dd LIBIMG_FORMAT_ID_XCF, img.is.xcf, img.decode.xcf, img.encode.xcf, 0
.tiff dd LIBIMG_FORMAT_ID_TIFF, img.is.tiff, img.decode.tiff, img.encode.tiff,0
.pnm dd LIBIMG_FORMAT_ID_PNM, img.is.pnm, img.decode.pnm, img.encode.pnm, 1 + (1 SHL Image.bpp1) + (1 SHL Image.bpp8g) + (1 SHL Image.bpp24)
.wbmp dd LIBIMG_FORMAT_ID_WBMP, img.is.wbmp, img.decode.wbmp, img.encode.wbmp,0
.z80 dd LIBIMG_FORMAT_ID_Z80, img.is.z80, img.decode.z80, img.encode.z80, 0 ;this must be the last entry as there are no signatures in z80 screens at all
.bmp dd LIBIMG_FORMAT_BMP, img.is.bmp, img.decode.bmp, img.encode.bmp, 1 + (1 SHL Image.bpp24) + (1 SHL Image.bpp32)
.ico dd LIBIMG_FORMAT_ICO, img.is.ico, img.decode.ico_cur, img.encode.ico, 0
.cur dd LIBIMG_FORMAT_CUR, img.is.cur, img.decode.ico_cur, img.encode.cur, 0
.gif dd LIBIMG_FORMAT_GIF, img.is.gif, img.decode.gif, img.encode.gif, 0
.png dd LIBIMG_FORMAT_PNG, img.is.png, img.decode.png, img.encode.png, 0
.jpg dd LIBIMG_FORMAT_JPEG, img.is.jpg, img.decode.jpg, img.encode.jpg, 0
.tga dd LIBIMG_FORMAT_TGA, img.is.tga, img.decode.tga, img.encode.tga, 0
.pcx dd LIBIMG_FORMAT_PCX, img.is.pcx, img.decode.pcx, img.encode.pcx, 0
.xcf dd LIBIMG_FORMAT_XCF, img.is.xcf, img.decode.xcf, img.encode.xcf, 0
.tiff dd LIBIMG_FORMAT_TIFF, img.is.tiff, img.decode.tiff, img.encode.tiff,0
.pnm dd LIBIMG_FORMAT_PNM, img.is.pnm, img.decode.pnm, img.encode.pnm, 1 + (1 SHL Image.bpp1) + (1 SHL Image.bpp8g) + (1 SHL Image.bpp24)
.wbmp dd LIBIMG_FORMAT_WBMP, img.is.wbmp, img.decode.wbmp, img.encode.wbmp,0
.z80 dd LIBIMG_FORMAT_Z80, img.is.z80, img.decode.z80, img.encode.z80, 0 ;this must be the last entry as there are no signatures in z80 screens at all
dd 0
 
;;================================================================================================;;
/programs/develop/libraries/libs-dev/libimg/libimg.inc
18,34 → 18,35
;;================================================================================================;;
 
; list of format id's
LIBIMG_FORMAT_ID_BMP = 1
LIBIMG_FORMAT_ID_ICO = 2
LIBIMG_FORMAT_ID_CUR = 3
LIBIMG_FORMAT_ID_GIF = 4
LIBIMG_FORMAT_ID_PNG = 5
LIBIMG_FORMAT_ID_JPEG = 6
LIBIMG_FORMAT_ID_TGA = 7
LIBIMG_FORMAT_ID_PCX = 8
LIBIMG_FORMAT_ID_XCF = 9
LIBIMG_FORMAT_ID_TIFF = 10
LIBIMG_FORMAT_ID_PNM = 11
LIBIMG_FORMAT_ID_WBMP = 12
LIBIMG_FORMAT_ID_Z80 = 13
LIBIMG_FORMAT_BMP = 1
LIBIMG_FORMAT_ICO = 2
LIBIMG_FORMAT_CUR = 3
LIBIMG_FORMAT_GIF = 4
LIBIMG_FORMAT_PNG = 5
LIBIMG_FORMAT_JPEG = 6
LIBIMG_FORMAT_TGA = 7
LIBIMG_FORMAT_PCX = 8
LIBIMG_FORMAT_XCF = 9
LIBIMG_FORMAT_TIFF = 10
LIBIMG_FORMAT_PNM = 11
LIBIMG_FORMAT_WBMP = 12
LIBIMG_FORMAT_Z80 = 13
 
; scale type
LIBIMG_SCALE_TYPE_STRETCH = 0
LIBIMG_SCALE_TYPE_FIT_RECT = 1
LIBIMG_SCALE_TYPE_FIT_WIDTH = 2
LIBIMG_SCALE_TYPE_FIT_HEIGHT = 3
LIBIMG_SCALE_TYPE_FIT_MAX = 4
;LIBIMG_SCALE_TYPE_TILE = 5
; scale type ; corresponding img.scale params
LIBIMG_SCALE_INTEGER = 1 ; scale factor ; reserved 0
LIBIMG_SCALE_TILE = 2 ; new width ; new height
LIBIMG_SCALE_STRETCH = 3 ; new width ; new height
LIBIMG_SCALE_FIT_RECT = 4 ; new width ; new height
LIBIMG_SCALE_FIT_WIDTH = 5 ; new width ; new height
LIBIMG_SCALE_FIT_HEIGHT = 6 ; new width ; new height
LIBIMG_SCALE_FIT_MAX = 7 ; new width ; new height
 
; scale algorithm
;LIBIMG_SCALE_ALG_DEFAULT = 0
LIBIMG_SCALE_ALG_INTEGER = 1
LIBIMG_SCALE_ALG_BILINEAR = 2
;LIBIMG_SCALE_ALG_BICUBIC = 3
;LIBIMG_SCALE_ALG_LANCZOS = 4
; interpolation algorithm
LIBIMG_INTER_NONE = 0 ; use it with LIBIMG_SCALE_INTEGER, LIBIMG_SCALE_TILE, etc
LIBIMG_INTER_BILINEAR = 1
;LIBIMG_INTER_BICUBIC = 2
;LIBIMG_INTER_LANCZOS = 3
LIBIMG_INTER_DEFAULT = LIBIMG_INTER_BILINEAR
 
; error codes
LIBIMG_ERROR_OUT_OF_MEMORY = 1
54,9 → 55,10
LIBIMG_ERROR_BIT_DEPTH = 4
LIBIMG_ERROR_ENCODER = 5
LIBIMG_ERROR_SRC_TYPE = 6
LIBIMG_ERROR_SCALE_TYPE = 7
LIBIMG_ERROR_SCALE_ALG = 8
LIBIMG_ERROR_SCALE = 7
LIBIMG_ERROR_INTER = 8
LIBIMG_ERROR_NOT_INPLEMENTED = 9
LIBIMG_ERROR_INVALID_INPUT = 10
 
; encode flags (byte 0x02 of _common option)
LIBIMG_ENCODE_STRICT_SPECIFIC = 0x01
/programs/develop/libraries/libs-dev/libimg/scale.asm
18,7 → 18,7
;;================================================================================================;;
 
;;================================================================================================;;
proc img.scale _src, _crop_x, _crop_y, _crop_width, _crop_height, _dst, _scale_type, _scale_alg, _param1, _param2 ;;
proc img.scale _src, _crop_x, _crop_y, _crop_width, _crop_height, _dst, _scale, _inter, _param1, _param2 ;;
;;------------------------------------------------------------------------------------------------;;
;? scale _image ;;
;;------------------------------------------------------------------------------------------------;;
28,10 → 28,10
;> [_crop_width] = width of cropping rect ;;
;> [_crop_height] = height of cropping rect ;;
;> [_dst] = pointer to resulting image / 0 ;;
;> [_scale_type] = how to change width and height. see libimg.inc ;;
;> [_scale_alg] = algorithm to use. see libimg.inc ;;
;> [_param1] = the first argument passed to _scale_alg algorithm ;;
;> [_param2] = the second argument passed to _scale_alg algorithm ;;
;> [_scale] = how to change width and height. see libimg.inc ;;
;> [_inter] = interpolation algorithm ;;
;> [_param1] = see libimg.inc ;;
;> [_param2] = see libimg.inc ;;
;;------------------------------------------------------------------------------------------------;;
;< eax = 0 / pointer to scaled image ;;
;< ecx = error code / undefined ;;
45,11 → 45,11
src_width_bytes rd 1
src_height_pixels rd 1
 
scl_width_pixels rd 1
scl_width_pixels_inv rd 1
scl_height_pixels rd 1
scl_height_pixels_inv rd 1
scl_width_bytes rd 1
dst_width_pixels rd 1
dst_width_pixels_inv rd 1
dst_height_pixels rd 1
dst_height_pixels_inv rd 1
dst_width_bytes rd 1
bytes_per_pixel rd 1
 
crop_width_pixels_m1 rd 1
89,7 → 89,7
jne @f
mov [bytes_per_pixel], 3
lea ecx, [ecx*3]
lea edx, [ecx*3]
lea edx, [edx*3]
jmp .lab1
@@:
cmp eax, Image.bpp8g
104,27 → 104,121
add [src_data], edx
 
 
mov eax, [_scale_alg]
cmp eax, LIBIMG_SCALE_ALG_INTEGER
je .integer
cmp eax, LIBIMG_SCALE_ALG_BILINEAR
mov eax, [_scale]
cmp eax, LIBIMG_SCALE_INTEGER
je .scale_type.integer
cmp eax, LIBIMG_SCALE_TILE
je .scale_type.tile
cmp eax, LIBIMG_SCALE_FIT_RECT
je .scale_type.fit_rect
cmp eax, LIBIMG_SCALE_FIT_WIDTH
je .scale_type.fit_width
cmp eax, LIBIMG_SCALE_FIT_HEIGHT
je .scale_type.fit_height
cmp eax, LIBIMG_SCALE_FIT_MAX
je .scale_type.fit_max
cmp eax, LIBIMG_SCALE_STRETCH
je .scale_type.stretch
mov ecx, LIBIMG_ERROR_SCALE
jmp .error
 
.scale_type.integer:
jmp .integer
.scale_type.tile:
jmp .tile
.scale_type.fit_rect:
mov eax, [_param1]
shl eax, 16
add eax, 0x00008000
xor edx, edx
div [src_width_pixels]
mov ebx, eax
mov eax, [_param2]
shl eax, 16
add eax, 0x00008000
xor edx, edx
div [src_height_pixels]
mov ecx, eax
cmp ebx, ecx
jb @f
mov ebx, ecx
@@:
jmp .scale_type.fit_common
.scale_type.fit_max:
mov eax, [_param1]
shl eax, 16
add eax, 0x00008000
xor edx, edx
div [src_width_pixels]
mov ebx, eax
mov eax, [_param2]
shl eax, 16
add eax, 0x00008000
xor edx, edx
div [src_height_pixels]
mov ecx, eax
cmp ebx, ecx
ja @f
mov ebx, ecx
@@:
jmp .scale_type.fit_common
.scale_type.fit_width:
mov eax, [_param1]
shl eax, 16
add eax, 0x00008000
xor edx, edx
div [src_width_pixels]
mov ebx, eax
jmp .scale_type.fit_common
.scale_type.fit_height:
mov eax, [_param2]
shl eax, 16
add eax, 0x00008000
xor edx, edx
div [src_height_pixels]
mov ebx, eax
jmp .scale_type.fit_common
.scale_type.fit_common:
mov eax, [src_width_pixels]
mul ebx
shr eax, 16
mov [dst_width_pixels], eax
imul eax, [bytes_per_pixel]
mov [dst_width_bytes], eax
mov eax, [src_height_pixels]
mul ebx
shr eax, 16
mov [dst_height_pixels], eax
jmp .define_inter
.scale_type.stretch:
mov eax, [_param1]
mov [dst_width_pixels], eax
imul eax, [bytes_per_pixel]
mov [dst_width_bytes], eax
mov ecx, [_param2]
mov [dst_height_pixels], ecx
jmp .define_inter
.define_inter:
mov eax, [_inter]
cmp eax, LIBIMG_INTER_BILINEAR
je .bilinear
mov ecx, LIBIMG_ERROR_SCALE_ALG
mov ecx, LIBIMG_ERROR_INTER
jmp .error
 
 
.integer:
mov eax, [_param1]
mov ecx, [_crop_width]
imul ecx, eax
mov [scl_width_pixels], ecx
mov [dst_width_pixels], ecx
mov edx, [_crop_height]
imul edx, eax
mov [scl_height_pixels], edx
mov [dst_height_pixels], edx
 
mov eax, [_dst]
test eax, eax
jnz @f
stdcall img.create, [scl_width_pixels], [scl_height_pixels], [src_type]
stdcall img.create, [dst_width_pixels], [dst_height_pixels], [src_type]
test eax, eax
jz .error
mov [_dst], eax
144,8 → 238,8
jmp .error
 
.integer.bpp8g:
push [scl_width_pixels]
pop [scl_width_bytes]
push [dst_width_pixels]
pop [dst_width_bytes]
mov ecx, [_param1]
; cmp ecx, 1
; je .error
163,10 → 257,10
jnz @b
push esi
mov esi, edi
sub esi, [scl_width_bytes]
sub esi, [dst_width_bytes]
mov ecx, edx
dec ecx
imul ecx, [scl_width_bytes]
imul ecx, [dst_width_bytes]
mov eax, ecx
shr ecx, 2
and eax, 0x00000003
184,9 → 278,9
jmp .quit
 
.integer.bpp24:
mov eax, [scl_width_pixels]
mov eax, [dst_width_pixels]
lea eax, [eax*3]
mov [scl_width_bytes], eax
mov [dst_width_bytes], eax
mov ecx, [_param1]
; cmp ecx, 1
; je .error
211,10 → 305,10
jnz @b
push esi
mov esi, edi
sub esi, [scl_width_bytes]
sub esi, [dst_width_bytes]
mov ecx, edx
dec ecx
imul ecx, [scl_width_bytes]
imul ecx, [dst_width_bytes]
mov eax, ecx
shr ecx, 2
and eax, 0x00000003
233,9 → 327,9
jmp .quit
 
.integer.bpp32:
mov eax, [scl_width_pixels]
mov eax, [dst_width_pixels]
shl eax, 2
mov [scl_width_bytes], eax
mov [dst_width_bytes], eax
mov ecx, [_param1]
; cmp ecx, 1
; je .error
253,10 → 347,10
jnz @b
push esi
mov esi, edi
sub esi, [scl_width_bytes]
sub esi, [dst_width_bytes]
mov ecx, edx
dec ecx
imul ecx, [scl_width_bytes]
imul ecx, [dst_width_bytes]
shr ecx, 2
rep movsd
pop esi
271,98 → 365,73
jmp .quit
 
 
.bilinear:
mov eax, [_scale_type]
cmp eax, LIBIMG_SCALE_TYPE_FIT_RECT
je .bilinear.fit_rect
cmp eax, LIBIMG_SCALE_TYPE_FIT_WIDTH
je .bilinear.fit_width
cmp eax, LIBIMG_SCALE_TYPE_FIT_HEIGHT
je .bilinear.fit_height
cmp eax, LIBIMG_SCALE_TYPE_FIT_MAX
je .bilinear.fit_max
cmp eax, LIBIMG_SCALE_TYPE_STRETCH
je .bilinear.stretch
mov ecx, LIBIMG_ERROR_SCALE_TYPE
jmp .error
.bilinear.fit_rect:
.tile:
mov eax, [_param1]
shl eax, 16
add eax, 0x00008000
xor edx, edx
div [src_width_pixels]
mov ebx, eax
mov [dst_width_pixels], eax
imul eax, [bytes_per_pixel]
mov [dst_width_bytes], eax
mov eax, [_param2]
shl eax, 16
add eax, 0x00008000
xor edx, edx
div [src_height_pixels]
mov ecx, eax
cmp ebx, ecx
jb @f
mov ebx, ecx
mov [dst_height_pixels], eax
 
mov eax, [_dst]
test eax, eax
jnz @f
stdcall img.create, [dst_width_pixels], [dst_height_pixels], [src_type]
test eax, eax
jz .error
mov [_dst], eax
@@:
jmp .bilinear.fit_common
.bilinear.fit_max:
mov eax, [_param1]
shl eax, 16
add eax, 0x00008000
xor edx, edx
div [src_width_pixels]
mov ebx, eax
mov eax, [_param2]
shl eax, 16
add eax, 0x00008000
xor edx, edx
div [src_height_pixels]
mov ecx, eax
cmp ebx, ecx
ja @f
mov ebx, ecx
mov edi, [eax + Image.Data]
mov [dst_data], edi
 
mov esi, [src_data]
mov eax, [_crop_height]
cmp eax, [dst_height_pixels]
jna @f
mov eax, [dst_height_pixels]
@@:
jmp .bilinear.fit_common
.bilinear.fit_width:
mov eax, [_param1]
shl eax, 16
add eax, 0x00008000
xor edx, edx
div [src_width_pixels]
mov ebx, eax
jmp .bilinear.fit_common
.bilinear.fit_height:
mov eax, [_param2]
shl eax, 16
add eax, 0x00008000
xor edx, edx
div [src_height_pixels]
mov ebx, eax
jmp .bilinear.fit_common
.bilinear.fit_common:
mov eax, [src_width_pixels]
mul ebx
shr eax, 16
mov [scl_width_pixels], eax
imul eax, [bytes_per_pixel]
mov [scl_width_bytes], eax
mov eax, [src_height_pixels]
mul ebx
shr eax, 16
mov [scl_height_pixels], eax
jmp .bilinear.common
.bilinear.stretch:
mov eax, [_param1]
mov [scl_width_pixels], eax
imul eax, [bytes_per_pixel]
mov [scl_width_bytes], eax
mov ecx, [_param2]
mov [scl_height_pixels], ecx
jmp .bilinear.common
push eax
mov ecx, [_crop_width]
cmp ecx, [dst_width_pixels]
jna @f
mov ecx, [dst_width_pixels]
@@:
imul ecx, [bytes_per_pixel]
mov edx, ecx
@@:
mov ecx, edx
rep movsb
 
.bilinear.common:
push esi
mov esi, edi
sub esi, edx
mov ecx, [dst_width_bytes]
sub ecx, edx
rep movsb
pop esi
 
mov ecx, [src_width_bytes]
sub ecx, edx
add esi, ecx
dec eax
jnz @b
 
pop eax
mov esi, [dst_data]
mov ecx, [dst_height_pixels]
sub ecx, eax
imul ecx, [dst_width_bytes]
rep movsb
 
mov eax, [_dst]
jmp .quit
 
 
.bilinear:
mov eax, [_dst]
test eax, eax
jnz @f
stdcall img.create, [scl_width_pixels], [scl_height_pixels], [src_type]
stdcall img.create, [dst_width_pixels], [dst_height_pixels], [src_type]
test eax, eax
jz .error
mov [_dst], eax
379,12 → 448,12
 
mov eax, 0xffffffff
xor edx, edx
div [scl_width_pixels]
mov [scl_width_pixels_inv], eax
div [dst_width_pixels]
mov [dst_width_pixels_inv], eax
mov eax, 0xffffffff
xor edx, edx
div [scl_height_pixels]
mov [scl_height_pixels_inv], eax
div [dst_height_pixels]
mov [dst_height_pixels_inv], eax
 
mov eax, [src_type]
cmp eax, Image.bpp8g
405,7 → 474,7
mov [dst_x], 0
imul eax, [crop_height_pixels_m1]
xor edx, edx
div [scl_height_pixels]
div [dst_height_pixels]
mov [rem_y], edx
imul eax, [src_width_bytes]
add esi, eax
417,7 → 486,7
 
imul eax, [crop_width_pixels_m1]
xor edx, edx
div [scl_width_pixels]
div [dst_width_pixels]
add esi, eax
 
mov ax, word[esi]
432,12 → 501,12
imul edx, esi
imul ecx, esi
neg esi
add esi, [scl_width_pixels]
add esi, [dst_width_pixels]
imul eax, esi
imul ebx, esi
add eax, edx
add ebx, ecx
mov esi, [scl_width_pixels_inv]
mov esi, [dst_width_pixels_inv]
mul esi
mov ecx, edx
mov eax, ebx
447,21 → 516,21
mov edx, [rem_y]
imul eax, edx
neg edx
add edx, [scl_height_pixels]
add edx, [dst_height_pixels]
imul ecx, edx
add eax, ecx
mul [scl_height_pixels_inv]
mul [dst_height_pixels_inv]
mov byte[edi], dl
add edi, 1
 
add [dst_x], 1
mov eax, [dst_x]
cmp eax, [scl_width_pixels]
cmp eax, [dst_width_pixels]
jne .bilinear.bpp8g.pixel
 
add [dst_y], 1
mov eax, [dst_y]
cmp eax, [scl_height_pixels]
cmp eax, [dst_height_pixels]
jne .bilinear.bpp8g.line
 
mov eax, [_dst]
477,7 → 546,7
mov [dst_x], 0
imul eax, [crop_height_pixels_m1]
xor edx, edx
div [scl_height_pixels]
div [dst_height_pixels]
mov [rem_y], edx
imul eax, [src_width_bytes]
add esi, eax
489,7 → 558,7
 
imul eax, [crop_width_pixels_m1]
xor edx, edx
div [scl_width_pixels]
div [dst_width_pixels]
lea eax, [eax*3]
add esi, eax
 
514,12 → 583,12
imul edx, esi
imul ecx, esi
neg esi
add esi, [scl_width_pixels]
add esi, [dst_width_pixels]
imul eax, esi
imul ebx, esi
add eax, edx
add ebx, ecx
mov esi, [scl_width_pixels_inv]
mov esi, [dst_width_pixels_inv]
mul esi
mov ecx, edx
mov eax, ebx
529,10 → 598,10
mov edx, [rem_y]
imul eax, edx
neg edx
add edx, [scl_height_pixels]
add edx, [dst_height_pixels]
imul ecx, edx
add eax, ecx
mul [scl_height_pixels_inv]
mul [dst_height_pixels_inv]
mov byte[edi], dl
add edi, 1
end repeat
539,12 → 608,12
 
add [dst_x], 1
mov eax, [dst_x]
cmp eax, [scl_width_pixels]
cmp eax, [dst_width_pixels]
jne .bilinear.bpp24.pixel
 
add [dst_y], 1
mov eax, [dst_y]
cmp eax, [scl_height_pixels]
cmp eax, [dst_height_pixels]
jne .bilinear.bpp24.line
 
mov eax, [_dst]
559,7 → 628,7
mov [dst_x], 0
imul eax, [crop_height_pixels_m1]
xor edx, edx
div [scl_height_pixels]
div [dst_height_pixels]
mov [rem_y], edx
imul eax, [src_width_bytes]
add esi, eax
571,7 → 640,7
 
imul eax, [crop_width_pixels_m1]
xor edx, edx
div [scl_width_pixels]
div [dst_width_pixels]
shl eax, 2
add esi, eax
 
596,12 → 665,12
imul edx, esi
imul ecx, esi
neg esi
add esi, [scl_width_pixels]
add esi, [dst_width_pixels]
imul eax, esi
imul ebx, esi
add eax, edx
add ebx, ecx
mov esi, [scl_width_pixels_inv]
mov esi, [dst_width_pixels_inv]
mul esi
mov ecx, edx
mov eax, ebx
611,10 → 680,10
mov edx, [rem_y]
imul eax, edx
neg edx
add edx, [scl_height_pixels]
add edx, [dst_height_pixels]
imul ecx, edx
add eax, ecx
mul [scl_height_pixels_inv]
mul [dst_height_pixels_inv]
mov byte[edi], dl
add edi, 1
end repeat
621,12 → 690,12
 
add [dst_x], 1
mov eax, [dst_x]
cmp eax, [scl_width_pixels]
cmp eax, [dst_width_pixels]
jne .bilinear.bpp32.pixel
 
add [dst_y], 1
mov eax, [dst_y]
cmp eax, [scl_height_pixels]
cmp eax, [dst_height_pixels]
jne .bilinear.bpp32.line
 
mov eax, [_dst]
/programs/develop/libraries/libs-dev/libimg/tiff/tiff.asm
395,6 → 395,8
.post.predictor:
cmp [ebx + tiff_extra.predictor], 2 ; Horizontal differencing
jne .post.end
cmp [ebx + tiff_extra.image_width], 1
je .post.end
push ebx
mov edi, [ebx + tiff_extra.samples_per_pixel]
mov edx, edi