forked from KolibriOS/kolibrios
libimg: can save 32 bit png
git-svn-id: svn://kolibrios.org@8463 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
8b8d6bf12d
commit
e532373af8
@ -8,7 +8,7 @@ dd 1,START,I_END,MEM,STACKTOP,0,cur_dir_path
|
|||||||
include '../../../../../proc32.inc'
|
include '../../../../../proc32.inc'
|
||||||
include '../../../../../macros.inc'
|
include '../../../../../macros.inc'
|
||||||
include '../../../../../KOSfuncs.inc'
|
include '../../../../../KOSfuncs.inc'
|
||||||
include '../../../box_lib/load_lib.mac'
|
include '../../../../../load_lib.mac'
|
||||||
include '../../../../../dll.inc'
|
include '../../../../../dll.inc'
|
||||||
include '../../libimg/libimg.inc'
|
include '../../libimg/libimg.inc'
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ else
|
|||||||
end if
|
end if
|
||||||
}
|
}
|
||||||
|
|
||||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
|
@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
m1size dd 16*1024
|
m1size dd 16*1024
|
||||||
@ -251,18 +251,9 @@ lib_name_0 db 'buf2d.obj',0
|
|||||||
system_dir_1 db '/sys/lib/'
|
system_dir_1 db '/sys/lib/'
|
||||||
lib_name_1 db 'libimg.obj',0
|
lib_name_1 db 'libimg.obj',0
|
||||||
|
|
||||||
err_message_found_lib0 db 'Sorry I cannot load library buf2d.obj',0
|
|
||||||
err_message_found_lib1 db 'Sorry I cannot load library libimg.obj',0
|
|
||||||
head_f_i:
|
|
||||||
head_f_l db 'System error',0
|
|
||||||
err_message_import0 db 'Error on load import library buf2d.obj',0
|
|
||||||
err_message_import1 db 'Error on load import library libimg.obj',0
|
|
||||||
|
|
||||||
l_libs_start:
|
l_libs_start:
|
||||||
lib0 l_libs lib_name_0, cur_dir_path, library_path, system_dir_0,\
|
lib0 l_libs lib_name_0, library_path, system_dir_0, import_buf2d_lib
|
||||||
err_message_found_lib0, head_f_l, import_buf2d_lib,err_message_import0, head_f_i
|
lib1 l_libs lib_name_1, library_path, system_dir_1, import_libimg
|
||||||
lib1 l_libs lib_name_1, cur_dir_path, library_path, system_dir_1,\
|
|
||||||
err_message_found_lib1, head_f_l, import_libimg, err_message_import1, head_f_i
|
|
||||||
load_lib_end:
|
load_lib_end:
|
||||||
;---------------------------------------------------------------------
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
@ -270,8 +261,6 @@ align 16
|
|||||||
I_END:
|
I_END:
|
||||||
rd 4096
|
rd 4096
|
||||||
STACKTOP:
|
STACKTOP:
|
||||||
cur_dir_path:
|
cur_dir_path rb 4096
|
||||||
rb 4096
|
library_path rb 4096
|
||||||
library_path:
|
|
||||||
rb 4096
|
|
||||||
MEM:
|
MEM:
|
||||||
|
@ -741,7 +741,7 @@ proc img.decode _data, _length, _options ;//////////////////////////////////////
|
|||||||
endp
|
endp
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
proc img.encode _img, _common, _specific ;////////////////////////////////////////////////////////;;
|
proc img.encode uses ebx, _img, _common, _specific ;////////////////////////////////////////////////////////;;
|
||||||
;;------------------------------------------------------------------------------------------------;;
|
;;------------------------------------------------------------------------------------------------;;
|
||||||
;? encode image to some format ;;
|
;? encode image to some format ;;
|
||||||
;;------------------------------------------------------------------------------------------------;;
|
;;------------------------------------------------------------------------------------------------;;
|
||||||
|
@ -1465,34 +1465,34 @@ PNG_FORMAT_FLAG_AFIRST equ 0x20 ;alpha channel comes first
|
|||||||
|
|
||||||
PNG_FORMAT_GRAY equ 0
|
PNG_FORMAT_GRAY equ 0
|
||||||
PNG_FORMAT_GA equ PNG_FORMAT_FLAG_ALPHA
|
PNG_FORMAT_GA equ PNG_FORMAT_FLAG_ALPHA
|
||||||
PNG_FORMAT_AG equ (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST)
|
PNG_FORMAT_AG equ (PNG_FORMAT_GA or PNG_FORMAT_FLAG_AFIRST)
|
||||||
PNG_FORMAT_RGB equ PNG_FORMAT_FLAG_COLOR
|
PNG_FORMAT_RGB equ PNG_FORMAT_FLAG_COLOR
|
||||||
PNG_FORMAT_BGR equ (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR)
|
PNG_FORMAT_BGR equ (PNG_FORMAT_FLAG_COLOR or PNG_FORMAT_FLAG_BGR)
|
||||||
PNG_FORMAT_RGBA equ (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA)
|
PNG_FORMAT_RGBA equ (PNG_FORMAT_RGB or PNG_FORMAT_FLAG_ALPHA)
|
||||||
PNG_FORMAT_ARGB equ (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST)
|
PNG_FORMAT_ARGB equ (PNG_FORMAT_RGBA or PNG_FORMAT_FLAG_AFIRST)
|
||||||
PNG_FORMAT_BGRA equ (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA)
|
PNG_FORMAT_BGRA equ (PNG_FORMAT_BGR or PNG_FORMAT_FLAG_ALPHA)
|
||||||
PNG_FORMAT_ABGR equ (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST)
|
PNG_FORMAT_ABGR equ (PNG_FORMAT_BGRA or PNG_FORMAT_FLAG_AFIRST)
|
||||||
|
|
||||||
; Then the linear 2-byte formats. When naming these "Y" is used to
|
; Then the linear 2-byte formats. When naming these "Y" is used to
|
||||||
; indicate a luminance (gray) channel.
|
; indicate a luminance (gray) channel.
|
||||||
|
|
||||||
PNG_FORMAT_LINEAR_Y equ PNG_FORMAT_FLAG_LINEAR
|
PNG_FORMAT_LINEAR_Y equ PNG_FORMAT_FLAG_LINEAR
|
||||||
PNG_FORMAT_LINEAR_Y_ALPHA equ (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA)
|
PNG_FORMAT_LINEAR_Y_ALPHA equ (PNG_FORMAT_FLAG_LINEAR or PNG_FORMAT_FLAG_ALPHA)
|
||||||
PNG_FORMAT_LINEAR_RGB equ (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR)
|
PNG_FORMAT_LINEAR_RGB equ (PNG_FORMAT_FLAG_LINEAR or PNG_FORMAT_FLAG_COLOR)
|
||||||
PNG_FORMAT_LINEAR_RGB_ALPHA equ\
|
PNG_FORMAT_LINEAR_RGB_ALPHA equ\
|
||||||
(PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA)
|
(PNG_FORMAT_FLAG_LINEAR or PNG_FORMAT_FLAG_COLOR or PNG_FORMAT_FLAG_ALPHA)
|
||||||
|
|
||||||
; With color-mapped formats the image data is one byte for each pixel, the byte
|
; With color-mapped formats the image data is one byte for each pixel, the byte
|
||||||
; is an index into the color-map which is formatted as above. To obtain a
|
; is an index into the color-map which is formatted as above. To obtain a
|
||||||
; color-mapped format it is sufficient just to add the PNG_FOMAT_FLAG_COLORMAP
|
; color-mapped format it is sufficient just to add the PNG_FOMAT_FLAG_COLORMAP
|
||||||
; to one of the above definitions, or you can use one of the definitions below.
|
; to one of the above definitions, or you can use one of the definitions below.
|
||||||
|
|
||||||
PNG_FORMAT_RGB_COLORMAP equ (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_COLORMAP)
|
PNG_FORMAT_RGB_COLORMAP equ (PNG_FORMAT_RGB or PNG_FORMAT_FLAG_COLORMAP)
|
||||||
PNG_FORMAT_BGR_COLORMAP equ (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_COLORMAP)
|
PNG_FORMAT_BGR_COLORMAP equ (PNG_FORMAT_BGR or PNG_FORMAT_FLAG_COLORMAP)
|
||||||
PNG_FORMAT_RGBA_COLORMAP equ (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_COLORMAP)
|
PNG_FORMAT_RGBA_COLORMAP equ (PNG_FORMAT_RGBA or PNG_FORMAT_FLAG_COLORMAP)
|
||||||
PNG_FORMAT_ARGB_COLORMAP equ (PNG_FORMAT_ARGB|PNG_FORMAT_FLAG_COLORMAP)
|
PNG_FORMAT_ARGB_COLORMAP equ (PNG_FORMAT_ARGB or PNG_FORMAT_FLAG_COLORMAP)
|
||||||
PNG_FORMAT_BGRA_COLORMAP equ (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_COLORMAP)
|
PNG_FORMAT_BGRA_COLORMAP equ (PNG_FORMAT_BGRA or PNG_FORMAT_FLAG_COLORMAP)
|
||||||
PNG_FORMAT_ABGR_COLORMAP equ (PNG_FORMAT_ABGR|PNG_FORMAT_FLAG_COLORMAP)
|
PNG_FORMAT_ABGR_COLORMAP equ (PNG_FORMAT_ABGR or PNG_FORMAT_FLAG_COLORMAP)
|
||||||
|
|
||||||
; PNG_IMAGE macros
|
; PNG_IMAGE macros
|
||||||
|
|
||||||
@ -1555,8 +1555,8 @@ local .end0
|
|||||||
local .end1
|
local .end1
|
||||||
mov eax,fmt
|
mov eax,fmt
|
||||||
and eax,PNG_FORMAT_FLAG_COLORMAP
|
and eax,PNG_FORMAT_FLAG_COLORMAP
|
||||||
cmp eax,0
|
or eax,eax
|
||||||
je .end0
|
jz .end0
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
inc eax
|
inc eax
|
||||||
jmp .end1
|
jmp .end1
|
||||||
@ -1573,9 +1573,11 @@ macro PNG_IMAGE_PIXEL_CHANNELS fmt
|
|||||||
; color-mapped image.
|
; color-mapped image.
|
||||||
|
|
||||||
|
|
||||||
;#define PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)\
|
macro PNG_IMAGE_PIXEL_COMPONENT_SIZE fmt
|
||||||
; PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_COMPONENT_SIZE,fmt)
|
{
|
||||||
; /* The size, in bytes, of each component in a pixel; 1 for a color-mapped
|
PNG_IMAGE_PIXEL_ PNG_IMAGE_SAMPLE_COMPONENT_SIZE,fmt
|
||||||
|
}
|
||||||
|
; The size, in bytes, of each component in a pixel; 1 for a color-mapped
|
||||||
; image.
|
; image.
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,11 +24,11 @@ proc png_set_bKGD uses ecx edi esi, png_ptr:dword, info_ptr:dword, background:dw
|
|||||||
cmp dword[png_ptr],0
|
cmp dword[png_ptr],0
|
||||||
je .end_f
|
je .end_f
|
||||||
mov edi,[info_ptr]
|
mov edi,[info_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[background]
|
mov esi,[background]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f ;if (..==0 || ..==0 || ..==0) return
|
jz .end_f ;if (..==0 || ..==0 || ..==0) return
|
||||||
|
|
||||||
or dword[edi+png_info_def.valid],PNG_INFO_bKGD
|
or dword[edi+png_info_def.valid],PNG_INFO_bKGD
|
||||||
add edi,png_info_def.background
|
add edi,png_info_def.background
|
||||||
@ -87,11 +87,11 @@ proc png_set_cHRM_XYZ_fixed uses edi esi, png_ptr:dword, info_ptr:dword,\
|
|||||||
png_debug1 1, 'in %s storage function', 'cHRM XYZ fixed'
|
png_debug1 1, 'in %s storage function', 'cHRM XYZ fixed'
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[info_ptr]
|
mov esi,[info_ptr]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f ;if (..==0 || ..==0) return
|
jz .end_f ;if (..==0 || ..==0) return
|
||||||
|
|
||||||
; XYZ.red_X = int_red_X;
|
; XYZ.red_X = int_red_X;
|
||||||
; XYZ.red_Y = int_red_Y;
|
; XYZ.red_Y = int_red_Y;
|
||||||
@ -155,11 +155,11 @@ proc png_set_gAMA_fixed uses eax edi esi, png_ptr:dword, info_ptr:dword, file_ga
|
|||||||
png_debug1 1, 'in %s storage function', 'gAMA'
|
png_debug1 1, 'in %s storage function', 'gAMA'
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[info_ptr]
|
mov esi,[info_ptr]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f ;if (..== 0 || ..== 0) return
|
jz .end_f ;if (..== 0 || ..== 0) return
|
||||||
|
|
||||||
mov eax,esi
|
mov eax,esi
|
||||||
add eax,png_info_def.colorspace
|
add eax,png_info_def.colorspace
|
||||||
@ -186,11 +186,11 @@ proc png_set_hIST uses edi esi, png_ptr:dword, info_ptr:dword, hist:dword
|
|||||||
png_debug1 1, 'in %s storage function', 'hIST'
|
png_debug1 1, 'in %s storage function', 'hIST'
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[info_ptr]
|
mov esi,[info_ptr]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f ;if (..== 0 || ..== 0) return
|
jz .end_f ;if (..== 0 || ..== 0) return
|
||||||
|
|
||||||
; if (info_ptr->num_palette == 0 || info_ptr->num_palette
|
; if (info_ptr->num_palette == 0 || info_ptr->num_palette
|
||||||
; > PNG_MAX_PALETTE_LENGTH)
|
; > PNG_MAX_PALETTE_LENGTH)
|
||||||
@ -236,11 +236,11 @@ proc png_set_IHDR, png_ptr:dword, info_ptr:dword,\
|
|||||||
png_debug1 1, 'in %s storage function', 'IHDR'
|
png_debug1 1, 'in %s storage function', 'IHDR'
|
||||||
pushad
|
pushad
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[info_ptr]
|
mov esi,[info_ptr]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f ;if (..== 0 || ..== 0) return
|
jz .end_f ;if (..== 0 || ..== 0) return
|
||||||
|
|
||||||
mov eax,[width]
|
mov eax,[width]
|
||||||
mov [esi+png_info_def.width],eax
|
mov [esi+png_info_def.width],eax
|
||||||
@ -271,8 +271,8 @@ pushad
|
|||||||
@@:
|
@@:
|
||||||
mov eax,ebx
|
mov eax,ebx
|
||||||
and eax,PNG_COLOR_MASK_COLOR
|
and eax,PNG_COLOR_MASK_COLOR
|
||||||
cmp eax,0
|
or eax,eax
|
||||||
je @f ;else if (..!=0)
|
jz @f ;else if (..!=0)
|
||||||
mov byte[esi+png_info_def.channels], 3
|
mov byte[esi+png_info_def.channels], 3
|
||||||
jmp .end0
|
jmp .end0
|
||||||
@@: ;else
|
@@: ;else
|
||||||
@ -281,8 +281,8 @@ pushad
|
|||||||
|
|
||||||
mov eax,ebx
|
mov eax,ebx
|
||||||
and eax,PNG_COLOR_MASK_ALPHA
|
and eax,PNG_COLOR_MASK_ALPHA
|
||||||
cmp eax,0
|
or eax,eax
|
||||||
je @f ;else if (..!=0)
|
jz @f ;else if (..!=0)
|
||||||
inc byte[esi+png_info_def.channels]
|
inc byte[esi+png_info_def.channels]
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
@ -307,8 +307,8 @@ proc png_set_oFFs uses eax esi, png_ptr:dword, info_ptr:dword, offset_x:dword, o
|
|||||||
cmp dword[png_ptr],0
|
cmp dword[png_ptr],0
|
||||||
je @f
|
je @f
|
||||||
mov esi,[info_ptr]
|
mov esi,[info_ptr]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je @f ;if (..==0 || ..==0) return
|
jz @f ;if (..==0 || ..==0) return
|
||||||
|
|
||||||
mov eax,[offset_x]
|
mov eax,[offset_x]
|
||||||
mov [esi+png_info_def.x_offset],eax
|
mov [esi+png_info_def.x_offset],eax
|
||||||
@ -332,11 +332,11 @@ proc png_set_pCAL uses edi esi, png_ptr:dword, info_ptr:dword, purpose:dword, X0
|
|||||||
png_debug1 1, 'in %s storage function', 'pCAL'
|
png_debug1 1, 'in %s storage function', 'pCAL'
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[info_ptr]
|
mov esi,[info_ptr]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f
|
jz .end_f
|
||||||
cmp dword[purpose],0
|
cmp dword[purpose],0
|
||||||
je .end_f
|
je .end_f
|
||||||
cmp dword[units],0
|
cmp dword[units],0
|
||||||
@ -599,11 +599,11 @@ proc png_set_PLTE uses eax edi esi, png_ptr:dword, info_ptr:dword, palette:dword
|
|||||||
png_debug1 1, 'in %s storage function', 'PLTE'
|
png_debug1 1, 'in %s storage function', 'PLTE'
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[info_ptr]
|
mov esi,[info_ptr]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f ;if (..==0 || ..==0) return
|
jz .end_f ;if (..==0 || ..==0) return
|
||||||
|
|
||||||
; max_palette_length = (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) ?
|
; max_palette_length = (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) ?
|
||||||
; (1 << info_ptr->bit_depth) : PNG_MAX_PALETTE_LENGTH;
|
; (1 << info_ptr->bit_depth) : PNG_MAX_PALETTE_LENGTH;
|
||||||
@ -679,11 +679,11 @@ proc png_set_sRGB uses eax edi esi, png_ptr:dword, info_ptr:dword, srgb_intent:d
|
|||||||
png_debug1 1, 'in %s storage function', 'sRGB'
|
png_debug1 1, 'in %s storage function', 'sRGB'
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[info_ptr]
|
mov esi,[info_ptr]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f ;if (..==0 || ..==0)
|
jz .end_f ;if (..==0 || ..==0)
|
||||||
|
|
||||||
mov eax,esi
|
mov eax,esi
|
||||||
add eax,png_info_def.colorspace
|
add eax,png_info_def.colorspace
|
||||||
@ -790,8 +790,8 @@ proc png_set_text uses eax edi, png_ptr:dword, info_ptr:dword, text_ptr:dword, n
|
|||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
stdcall png_set_text_2, edi, [info_ptr], [text_ptr], [num_text]
|
stdcall png_set_text_2, edi, [info_ptr], [text_ptr], [num_text]
|
||||||
|
|
||||||
cmp eax,0
|
or eax,eax
|
||||||
je @f ;if (..!=0)
|
jz @f ;if (..!=0)
|
||||||
png_error edi, 'Insufficient memory to store text'
|
png_error edi, 'Insufficient memory to store text'
|
||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
@ -997,18 +997,18 @@ proc png_set_tIME uses eax ebx ecx edi esi, png_ptr:dword, info_ptr:dword, mod_t
|
|||||||
png_debug1 1, 'in %s storage function', 'tIME'
|
png_debug1 1, 'in %s storage function', 'tIME'
|
||||||
|
|
||||||
mov ebx,[png_ptr]
|
mov ebx,[png_ptr]
|
||||||
cmp ebx,0
|
or ebx,ebx
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov edi,[info_ptr]
|
mov edi,[info_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[mod_time]
|
mov esi,[mod_time]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov eax,[ebx+png_struct.mode]
|
mov eax,[ebx+png_struct.mode]
|
||||||
and eax,PNG_WROTE_tIME
|
and eax,PNG_WROTE_tIME
|
||||||
cmp eax,0
|
or eax,eax
|
||||||
jne .end_f ;if (..==0 || ..==0 || ..==0 || ..!=0) return
|
jnz .end_f ;if (..==0 || ..==0 || ..==0 || ..!=0) return
|
||||||
|
|
||||||
cmp byte[esi+png_time.month],0
|
cmp byte[esi+png_time.month],0
|
||||||
je @f
|
je @f
|
||||||
@ -1251,11 +1251,11 @@ proc png_set_unknown_chunks uses edi esi, png_ptr:dword, info_ptr:dword, unknown
|
|||||||
; png_unknown_chunkp np;
|
; png_unknown_chunkp np;
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[info_ptr]
|
mov esi,[info_ptr]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f
|
jz .end_f
|
||||||
cmp dword[num_unknowns],0
|
cmp dword[num_unknowns],0
|
||||||
jle .end_f
|
jle .end_f
|
||||||
cmp dword[unknowns],0
|
cmp dword[unknowns],0
|
||||||
@ -1431,8 +1431,8 @@ proc png_set_keep_unknown_chunks uses edi, png_ptr:dword, keep:dword, chunk_list
|
|||||||
; uint num_chunks, old_num_chunks;
|
; uint num_chunks, old_num_chunks;
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f ;if (..== 0) return
|
jz .end_f ;if (..== 0) return
|
||||||
|
|
||||||
; if (keep < 0 || keep >= PNG_HANDLE_CHUNK_LAST)
|
; if (keep < 0 || keep >= PNG_HANDLE_CHUNK_LAST)
|
||||||
; {
|
; {
|
||||||
@ -1588,8 +1588,8 @@ proc png_set_read_user_chunk_fn uses eax edi, png_ptr:dword, user_chunk_ptr:dwor
|
|||||||
png_debug 1, 'in png_set_read_user_chunk_fn'
|
png_debug 1, 'in png_set_read_user_chunk_fn'
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
|
|
||||||
mov eax,[read_user_chunk_fn]
|
mov eax,[read_user_chunk_fn]
|
||||||
mov [edi+png_struct.read_user_chunk_fn],eax
|
mov [edi+png_struct.read_user_chunk_fn],eax
|
||||||
@ -1605,11 +1605,11 @@ proc png_set_rows uses eax edi esi, png_ptr:dword, info_ptr:dword, row_pointers:
|
|||||||
png_debug1 1, 'in %s storage function', 'rows'
|
png_debug1 1, 'in %s storage function', 'rows'
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[info_ptr]
|
mov esi,[info_ptr]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f ;if (..==0 || ..==0) return
|
jz .end_f ;if (..==0 || ..==0) return
|
||||||
|
|
||||||
mov eax,[row_pointers]
|
mov eax,[row_pointers]
|
||||||
cmp dword[esi+png_info_def.row_pointers],0
|
cmp dword[esi+png_info_def.row_pointers],0
|
||||||
@ -1620,8 +1620,8 @@ proc png_set_rows uses eax edi esi, png_ptr:dword, info_ptr:dword, row_pointers:
|
|||||||
@@:
|
@@:
|
||||||
mov [esi+png_info_def.row_pointers],eax
|
mov [esi+png_info_def.row_pointers],eax
|
||||||
|
|
||||||
cmp eax,0
|
or eax,eax
|
||||||
je .end_f ;if (..!=0)
|
jz .end_f ;if (..!=0)
|
||||||
or dword[esi+png_info_def.valid],PNG_INFO_IDAT
|
or dword[esi+png_info_def.valid],PNG_INFO_IDAT
|
||||||
.end_f:
|
.end_f:
|
||||||
ret
|
ret
|
||||||
@ -1631,8 +1631,8 @@ endp
|
|||||||
align 4
|
align 4
|
||||||
proc png_set_compression_buffer_size uses edi, png_ptr:dword, size:dword
|
proc png_set_compression_buffer_size uses edi, png_ptr:dword, size:dword
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f ;if (..==0) return
|
jz .end_f ;if (..==0) return
|
||||||
|
|
||||||
; if (size == 0 || size > PNG_UINT_31_MAX)
|
; if (size == 0 || size > PNG_UINT_31_MAX)
|
||||||
; png_error(png_ptr, "invalid compression buffer size");
|
; png_error(png_ptr, "invalid compression buffer size");
|
||||||
@ -1707,8 +1707,8 @@ proc png_set_user_limits uses eax edi, png_ptr:dword, user_width_max:dword, user
|
|||||||
; regardless of dimensions, set both limits to 0x7fffffff.
|
; regardless of dimensions, set both limits to 0x7fffffff.
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je @f
|
jz @f
|
||||||
mov eax,[user_width_max]
|
mov eax,[user_width_max]
|
||||||
mov [edi+png_struct.user_width_max],eax
|
mov [edi+png_struct.user_width_max],eax
|
||||||
mov eax,[user_height_max]
|
mov eax,[user_height_max]
|
||||||
|
@ -99,11 +99,11 @@ proc png_write_info_before_PLTE, png_ptr:dword, info_ptr:dword
|
|||||||
|
|
||||||
pushad
|
pushad
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[info_ptr]
|
mov esi,[info_ptr]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f ;if(..==0 || ..==0) return
|
jz .end_f ;if(..==0 || ..==0) return
|
||||||
|
|
||||||
mov eax,[edi+png_struct.mode]
|
mov eax,[edi+png_struct.mode]
|
||||||
and eax,PNG_WROTE_INFO_BEFORE_PLTE
|
and eax,PNG_WROTE_INFO_BEFORE_PLTE
|
||||||
@ -256,11 +256,11 @@ pushad
|
|||||||
png_debug 1, 'in png_write_info'
|
png_debug 1, 'in png_write_info'
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
cmp edi,0
|
or edi,edi
|
||||||
je .end_f
|
jz .end_f
|
||||||
mov esi,[info_ptr]
|
mov esi,[info_ptr]
|
||||||
cmp esi,0
|
or esi,esi
|
||||||
je .end_f ;if (..==0 || ..==0) return
|
jz .end_f ;if (..==0 || ..==0) return
|
||||||
|
|
||||||
stdcall png_write_info_before_PLTE, edi, esi
|
stdcall png_write_info_before_PLTE, edi, esi
|
||||||
|
|
||||||
@ -1842,7 +1842,6 @@ proc png_image_write_init uses ebx ecx edx edi esi, image:dword
|
|||||||
test eax,eax
|
test eax,eax
|
||||||
jz .end0 ;if (..!=0)
|
jz .end0 ;if (..!=0)
|
||||||
mov edi,eax
|
mov edi,eax
|
||||||
or dword[eax+png_struct.transformations],PNG_BGR ;transformation rgb for KoliriOS
|
|
||||||
stdcall png_create_info_struct, edi
|
stdcall png_create_info_struct, edi
|
||||||
;eax = info_ptr
|
;eax = info_ptr
|
||||||
|
|
||||||
@ -2454,16 +2453,18 @@ endl
|
|||||||
|
|
||||||
; The following four ints are actually booleans
|
; The following four ints are actually booleans
|
||||||
and ecx,PNG_FORMAT_FLAG_COLORMAP
|
and ecx,PNG_FORMAT_FLAG_COLORMAP
|
||||||
mov [colormap],ecx
|
mov [colormap],ecx ;colormap = (format & PNG_FORMAT_FLAG_COLORMAP)
|
||||||
not ecx
|
not ecx
|
||||||
|
|
||||||
mov eax,[format]
|
mov eax,[format]
|
||||||
and eax,PNG_FORMAT_FLAG_LINEAR
|
and eax,PNG_FORMAT_FLAG_LINEAR
|
||||||
mov [linear],eax
|
|
||||||
mov eax,[format]
|
|
||||||
and eax,ecx
|
and eax,ecx
|
||||||
|
mov [linear],eax ;linear = !colormap && (format & PNG_FORMAT_FLAG_LINEAR)
|
||||||
|
|
||||||
|
mov eax,[format]
|
||||||
and eax,PNG_FORMAT_FLAG_ALPHA
|
and eax,PNG_FORMAT_FLAG_ALPHA
|
||||||
and eax,ecx
|
and eax,ecx
|
||||||
mov [alpha],eax
|
mov [alpha],eax ;alpha = !colormap && (format & PNG_FORMAT_FLAG_ALPHA)
|
||||||
xor eax,eax ;false
|
xor eax,eax ;false
|
||||||
cmp dword[edx+png_image_write_control.convert_to_8bit],0
|
cmp dword[edx+png_image_write_control.convert_to_8bit],0
|
||||||
jne @f
|
jne @f
|
||||||
@ -2758,7 +2759,7 @@ end if
|
|||||||
; supported by the rest of the libpng write code; call it directly.
|
; supported by the rest of the libpng write code; call it directly.
|
||||||
|
|
||||||
.end9: ;else
|
.end9: ;else
|
||||||
if 1 ;;; IDAT compress all (only 24 bit)
|
if 1 ;;; IDAT compress all
|
||||||
cmp dword[ebx+png_image.height],1
|
cmp dword[ebx+png_image.height],1
|
||||||
jl .end8
|
jl .end8
|
||||||
mov ecx,[edx+png_image_write_control.row_bytes]
|
mov ecx,[edx+png_image_write_control.row_bytes]
|
||||||
@ -2794,7 +2795,7 @@ locals
|
|||||||
endl
|
endl
|
||||||
pushad
|
pushad
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
png_debug 1, 'IDAT compress all'
|
png_debug1 2, 'IDAT compress all len = %d', [len]
|
||||||
|
|
||||||
;create buffer with filters
|
;create buffer with filters
|
||||||
stdcall png_zalloc, edi, 1, [len]
|
stdcall png_zalloc, edi, 1, [len]
|
||||||
@ -2815,9 +2816,14 @@ png_debug 1, 'IDAT compress all'
|
|||||||
;init buffer with filters
|
;init buffer with filters
|
||||||
mov ebx,[width]
|
mov ebx,[width]
|
||||||
mov edx,[height]
|
mov edx,[height]
|
||||||
|
movzx eax,byte[edi+png_struct.color_type]
|
||||||
mov edi,[buf_f]
|
mov edi,[buf_f]
|
||||||
mov esi,[buf]
|
mov esi,[buf]
|
||||||
.cycle0:
|
|
||||||
|
cmp eax,PNG_COLOR_TYPE_RGB_ALPHA
|
||||||
|
je .cycle5
|
||||||
|
|
||||||
|
.cycle0: ;24 bit image
|
||||||
cmp edx,1
|
cmp edx,1
|
||||||
jl .cycle0end
|
jl .cycle0end
|
||||||
mov ecx,ebx
|
mov ecx,ebx
|
||||||
@ -2835,14 +2841,30 @@ align 4
|
|||||||
dec edx
|
dec edx
|
||||||
jmp .cycle0
|
jmp .cycle0
|
||||||
.cycle0end:
|
.cycle0end:
|
||||||
|
jmp .cycle5end
|
||||||
|
|
||||||
|
.cycle5: ;32 bit image
|
||||||
|
cmp edx,1
|
||||||
|
jl .cycle5end
|
||||||
|
mov ecx,ebx
|
||||||
|
xor al,al
|
||||||
|
stosb ;insert filter (0 - none)
|
||||||
|
align 4
|
||||||
|
.cycle6:
|
||||||
|
lodsd
|
||||||
|
bswap eax
|
||||||
|
ror eax,8
|
||||||
|
stosd
|
||||||
|
loop .cycle6
|
||||||
|
dec edx
|
||||||
|
jmp .cycle5
|
||||||
|
.cycle5end:
|
||||||
|
|
||||||
;make filters
|
;make filters
|
||||||
mov edx,[height]
|
mov edx,[height]
|
||||||
mov esi,[width]
|
|
||||||
imul esi,3 ;esi - rowbytes
|
|
||||||
|
|
||||||
inc esi
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
|
mov esi,[edi+png_struct.rowbytes]
|
||||||
|
inc esi
|
||||||
cmp dword[edi+png_struct.try_row],0
|
cmp dword[edi+png_struct.try_row],0
|
||||||
jne @f ;if (..==0)
|
jne @f ;if (..==0)
|
||||||
stdcall png_malloc, edi, esi
|
stdcall png_malloc, edi, esi
|
||||||
@ -2938,8 +2960,7 @@ align 4
|
|||||||
.cycle3end:
|
.cycle3end:
|
||||||
|
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
mov esi,edi
|
lea esi,[edi+png_struct.zstream]
|
||||||
add esi,png_struct.zstream
|
|
||||||
stdcall [deflateInit2], esi,\
|
stdcall [deflateInit2], esi,\
|
||||||
-1, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY
|
-1, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY
|
||||||
|
|
||||||
@ -3095,8 +3116,8 @@ endl
|
|||||||
|
|
||||||
; Write the image to the given buffer, or count the bytes if it is NULL
|
; Write the image to the given buffer, or count the bytes if it is NULL
|
||||||
mov ebx,[image]
|
mov ebx,[image]
|
||||||
cmp ebx,0
|
or ebx,ebx
|
||||||
je .end0
|
jz .end0
|
||||||
cmp dword[ebx+png_image.version],PNG_IMAGE_VERSION
|
cmp dword[ebx+png_image.version],PNG_IMAGE_VERSION
|
||||||
jne .end0 ;if (..!=0 && ..==..)
|
jne .end0 ;if (..!=0 && ..==..)
|
||||||
cmp dword[memory_bytes],0
|
cmp dword[memory_bytes],0
|
||||||
@ -3142,8 +3163,8 @@ endl
|
|||||||
stdcall png_image_free, ebx
|
stdcall png_image_free, ebx
|
||||||
|
|
||||||
; write_memory returns true even if we ran out of buffer.
|
; write_memory returns true even if we ran out of buffer.
|
||||||
cmp ecx,0 ;if (..)
|
or ecx,ecx ;if (..)
|
||||||
je .end4
|
jz .end4
|
||||||
; On out-of-buffer this function returns '0' but still updates
|
; On out-of-buffer this function returns '0' but still updates
|
||||||
; memory_bytes:
|
; memory_bytes:
|
||||||
|
|
||||||
@ -3167,8 +3188,8 @@ endl
|
|||||||
std_png_image_error ebx, 'png_image_write_to_memory: invalid argument'
|
std_png_image_error ebx, 'png_image_write_to_memory: invalid argument'
|
||||||
jmp .end_f
|
jmp .end_f
|
||||||
.end0:
|
.end0:
|
||||||
cmp ebx,0
|
or ebx,ebx
|
||||||
je .end1 ;else if (..!=0)
|
jz .end1 ;else if (..!=0)
|
||||||
std_png_image_error ebx, 'png_image_write_to_memory: incorrect PNG_IMAGE_VERSION'
|
std_png_image_error ebx, 'png_image_write_to_memory: incorrect PNG_IMAGE_VERSION'
|
||||||
jmp .end_f
|
jmp .end_f
|
||||||
.end1: ;else
|
.end1: ;else
|
||||||
|
@ -362,8 +362,7 @@ endl
|
|||||||
|
|
||||||
cmp dword[edi+png_struct.zowner],0
|
cmp dword[edi+png_struct.zowner],0
|
||||||
je .end0 ;if (..!=0)
|
je .end0 ;if (..!=0)
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-64]
|
||||||
sub ebx,64
|
|
||||||
if (PNG_WARNINGS_SUPPORTED eq 1) | (PNG_ERROR_TEXT_SUPPORTED eq 1)
|
if (PNG_WARNINGS_SUPPORTED eq 1) | (PNG_ERROR_TEXT_SUPPORTED eq 1)
|
||||||
mov eax,[owner]
|
mov eax,[owner]
|
||||||
mov [ebx],eax
|
mov [ebx],eax
|
||||||
@ -1012,8 +1011,7 @@ end if
|
|||||||
mov [edi+png_struct.usr_channels],al
|
mov [edi+png_struct.usr_channels],al
|
||||||
|
|
||||||
; Pack the header information into the buffer
|
; Pack the header information into the buffer
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-13]
|
||||||
sub ebx,13
|
|
||||||
stdcall png_save_uint_32, ebx, [width]
|
stdcall png_save_uint_32, ebx, [width]
|
||||||
add ebx,4
|
add ebx,4
|
||||||
stdcall png_save_uint_32, ebx, [height]
|
stdcall png_save_uint_32, ebx, [height]
|
||||||
@ -1043,8 +1041,7 @@ end if
|
|||||||
cmp byte[edi+png_struct.color_type],PNG_COLOR_TYPE_PALETTE
|
cmp byte[edi+png_struct.color_type],PNG_COLOR_TYPE_PALETTE
|
||||||
je @f
|
je @f
|
||||||
cmp byte[edi+png_struct.bit_depth],8
|
cmp byte[edi+png_struct.bit_depth],8
|
||||||
jl @f ;if ((..==..)||(..<..))
|
jge .els_5 ;if ((..==..)||(..<..))
|
||||||
jmp .els_5
|
|
||||||
@@:
|
@@:
|
||||||
mov byte[edi+png_struct.do_filter], PNG_FILTER_NONE
|
mov byte[edi+png_struct.do_filter], PNG_FILTER_NONE
|
||||||
jmp .end_5
|
jmp .end_5
|
||||||
@ -1371,8 +1368,7 @@ endl
|
|||||||
png_debug 1, 'in png_write_gAMA'
|
png_debug 1, 'in png_write_gAMA'
|
||||||
|
|
||||||
; file_gamma is saved in 1/100,000ths
|
; file_gamma is saved in 1/100,000ths
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-4]
|
||||||
sub ebx,4
|
|
||||||
stdcall png_save_uint_32 ,ebx, [file_gamma]
|
stdcall png_save_uint_32 ,ebx, [file_gamma]
|
||||||
stdcall png_write_complete_chunk, [png_ptr], png_gAMA, ebx, 4
|
stdcall png_write_complete_chunk, [png_ptr], png_gAMA, ebx, 4
|
||||||
ret
|
ret
|
||||||
@ -1441,8 +1437,7 @@ endl
|
|||||||
; png_error(png_ptr, "Profile length does not match profile");
|
; png_error(png_ptr, "Profile length does not match profile");
|
||||||
; }
|
; }
|
||||||
|
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-sizeof.compression_state]
|
||||||
sub ebx,sizeof.compression_state
|
|
||||||
mov ecx,ebx ;ecx = &comp
|
mov ecx,ebx ;ecx = &comp
|
||||||
sub ebx,81 ;ebx = &new_name
|
sub ebx,81 ;ebx = &new_name
|
||||||
stdcall png_check_keyword, edi, [name], ebx
|
stdcall png_check_keyword, edi, [name], ebx
|
||||||
@ -1632,8 +1627,7 @@ endl
|
|||||||
|
|
||||||
; Each value is saved in 1/100,000ths
|
; Each value is saved in 1/100,000ths
|
||||||
mov eax,[xy]
|
mov eax,[xy]
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-32]
|
||||||
sub ebx,32
|
|
||||||
; png_save_int_32(buf, xy->whitex);
|
; png_save_int_32(buf, xy->whitex);
|
||||||
; png_save_int_32(buf + 4, xy->whitey);
|
; png_save_int_32(buf + 4, xy->whitey);
|
||||||
|
|
||||||
@ -1691,8 +1685,7 @@ endl
|
|||||||
jmp .end_f
|
jmp .end_f
|
||||||
@@:
|
@@:
|
||||||
movzx eax,word[ecx+png_color_16.gray]
|
movzx eax,word[ecx+png_color_16.gray]
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-6]
|
||||||
sub ebx,6
|
|
||||||
stdcall png_save_uint_16, ebx, eax
|
stdcall png_save_uint_16, ebx, eax
|
||||||
stdcall png_write_complete_chunk, edi, png_tRNS, ebx, 2
|
stdcall png_write_complete_chunk, edi, png_tRNS, ebx, 2
|
||||||
jmp .end_f
|
jmp .end_f
|
||||||
@ -1701,8 +1694,7 @@ endl
|
|||||||
cmp dword[color_type],PNG_COLOR_TYPE_RGB
|
cmp dword[color_type],PNG_COLOR_TYPE_RGB
|
||||||
jne .end3 ;else if (..== ..)
|
jne .end3 ;else if (..== ..)
|
||||||
; Three 16-bit values
|
; Three 16-bit values
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-6]
|
||||||
sub ebx,6
|
|
||||||
mov ecx,[tran]
|
mov ecx,[tran]
|
||||||
movzx eax,word[ecx+png_color_16.red]
|
movzx eax,word[ecx+png_color_16.red]
|
||||||
stdcall png_save_uint_16, ebx, eax
|
stdcall png_save_uint_16, ebx, eax
|
||||||
@ -1720,8 +1712,8 @@ end if
|
|||||||
mov al,[ebx]
|
mov al,[ebx]
|
||||||
or al,[ebx+2]
|
or al,[ebx+2]
|
||||||
or al,[ebx+4]
|
or al,[ebx+4]
|
||||||
cmp al,0
|
or al,al
|
||||||
je @f ;if (..|..|..!=0)
|
jz @f ;if (..|..|..!=0)
|
||||||
png_app_warning edi, 'Ignoring attempt to write 16-bit tRNS chunk when bit_depth is 8'
|
png_app_warning edi, 'Ignoring attempt to write 16-bit tRNS chunk when bit_depth is 8'
|
||||||
jmp .end_f
|
jmp .end_f
|
||||||
@@:
|
@@:
|
||||||
@ -1947,8 +1939,7 @@ endl
|
|||||||
png_debug 1, 'in png_write_iTXt'
|
png_debug 1, 'in png_write_iTXt'
|
||||||
pushad
|
pushad
|
||||||
mov edi,[png_ptr]
|
mov edi,[png_ptr]
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-(82+sizeof.compression_state)]
|
||||||
sub ebx,82+sizeof.compression_state
|
|
||||||
stdcall png_check_keyword, edi, [key], ebx
|
stdcall png_check_keyword, edi, [key], ebx
|
||||||
mov [key_len],eax
|
mov [key_len],eax
|
||||||
|
|
||||||
@ -2057,8 +2048,7 @@ endl
|
|||||||
png_warning edi, 'Unrecognized unit type for oFFs chunk'
|
png_warning edi, 'Unrecognized unit type for oFFs chunk'
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-9]
|
||||||
sub ebx,9
|
|
||||||
stdcall png_save_int_32, ebx, [x_offset]
|
stdcall png_save_int_32, ebx, [x_offset]
|
||||||
add ebx,4
|
add ebx,4
|
||||||
stdcall png_save_int_32, ebx, [y_offset]
|
stdcall png_save_int_32, ebx, [y_offset]
|
||||||
@ -2095,8 +2085,7 @@ pushad
|
|||||||
png_error edi, 'Unrecognized equation type for pCAL chunk'
|
png_error edi, 'Unrecognized equation type for pCAL chunk'
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-84] ;ebx = &new_purpose
|
||||||
sub ebx,84 ;ebx = &new_purpose
|
|
||||||
stdcall png_check_keyword, edi, [purpose], ebx
|
stdcall png_check_keyword, edi, [purpose], ebx
|
||||||
mov [purpose_len],eax
|
mov [purpose_len],eax
|
||||||
|
|
||||||
@ -2129,8 +2118,7 @@ pushad
|
|||||||
png_debug1 3, 'pCAL total length = %d', [total_len]
|
png_debug1 3, 'pCAL total length = %d', [total_len]
|
||||||
stdcall png_write_chunk_header, edi, png_pCAL, [total_len]
|
stdcall png_write_chunk_header, edi, png_pCAL, [total_len]
|
||||||
stdcall png_write_chunk_data, edi, ebx, [purpose_len]
|
stdcall png_write_chunk_data, edi, ebx, [purpose_len]
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-94] ;ebx = &buf
|
||||||
sub ebx,94 ;ebx = &buf
|
|
||||||
stdcall png_save_int_32, ebx, [X0]
|
stdcall png_save_int_32, ebx, [X0]
|
||||||
add ebx,4
|
add ebx,4
|
||||||
stdcall png_save_int_32, ebx, [X1]
|
stdcall png_save_int_32, ebx, [X1]
|
||||||
@ -2181,8 +2169,7 @@ endl
|
|||||||
jmp .end_f
|
jmp .end_f
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-64]
|
||||||
sub ebx,64
|
|
||||||
mov eax,[unit]
|
mov eax,[unit]
|
||||||
mov byte[ebx],al
|
mov byte[ebx],al
|
||||||
mov ecx,[wlen]
|
mov ecx,[wlen]
|
||||||
@ -2216,8 +2203,7 @@ endl
|
|||||||
png_warning [png_ptr], 'Unrecognized unit type for pHYs chunk'
|
png_warning [png_ptr], 'Unrecognized unit type for pHYs chunk'
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-9]
|
||||||
sub ebx,9
|
|
||||||
stdcall png_save_uint_32, ebx, [x_pixels_per_unit]
|
stdcall png_save_uint_32, ebx, [x_pixels_per_unit]
|
||||||
add ebx,4
|
add ebx,4
|
||||||
stdcall png_save_uint_32, ebx, [y_pixels_per_unit]
|
stdcall png_save_uint_32, ebx, [y_pixels_per_unit]
|
||||||
@ -2264,8 +2250,7 @@ endl
|
|||||||
|
|
||||||
movzx ebx,word[eax+png_time.year]
|
movzx ebx,word[eax+png_time.year]
|
||||||
push ebx
|
push ebx
|
||||||
mov ebx,ebp
|
lea ebx,[ebp-7]
|
||||||
sub ebx,7
|
|
||||||
stdcall png_save_uint_16, ebx ;, year
|
stdcall png_save_uint_16, ebx ;, year
|
||||||
add ebx,2
|
add ebx,2
|
||||||
mov byte[ebx],cl ;month
|
mov byte[ebx],cl ;month
|
||||||
|
@ -1178,21 +1178,29 @@ endl
|
|||||||
mov eax,[ebx+Image.Type]
|
mov eax,[ebx+Image.Type]
|
||||||
cmp eax,Image.bpp24
|
cmp eax,Image.bpp24
|
||||||
je @f
|
je @f
|
||||||
|
cmp eax,Image.bpp32
|
||||||
|
jne .error
|
||||||
mov ecx,LIBIMG_ERROR_BIT_DEPTH
|
mov ecx,LIBIMG_ERROR_BIT_DEPTH
|
||||||
jmp .error
|
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
mov edx,ebp
|
lea edx,[ebp-sizeof.png_image]
|
||||||
sub edx,sizeof.png_image
|
|
||||||
mov dword[edx+png_image.version],PNG_IMAGE_VERSION
|
mov dword[edx+png_image.version],PNG_IMAGE_VERSION
|
||||||
mov ecx,[ebx+Image.Width]
|
mov ecx,[ebx+Image.Width]
|
||||||
mov [edx+png_image.width],ecx ;Image width in pixels (columns)
|
mov [edx+png_image.width],ecx ;Image width in pixels (columns)
|
||||||
|
cmp eax,Image.bpp24
|
||||||
|
jne @f
|
||||||
|
mov dword[edx+png_image.format],PNG_FORMAT_RGB
|
||||||
|
imul ecx,3
|
||||||
|
@@:
|
||||||
|
cmp eax,Image.bpp32
|
||||||
|
jne @f
|
||||||
|
mov dword[edx+png_image.format],PNG_FORMAT_RGBA
|
||||||
|
shl ecx,2
|
||||||
|
@@:
|
||||||
mov eax,[ebx+Image.Height]
|
mov eax,[ebx+Image.Height]
|
||||||
mov [edx+png_image.height],eax ;Image height in pixels (rows)
|
mov [edx+png_image.height],eax ;Image height in pixels (rows)
|
||||||
mov dword[edx+png_image.format],PNG_COLOR_TYPE_RGB
|
|
||||||
;mov dword[edx+png_image.flags],PNG_IMAGE_FLAG_???
|
;mov dword[edx+png_image.flags],PNG_IMAGE_FLAG_???
|
||||||
|
|
||||||
imul ecx,3
|
|
||||||
mov edi,ecx
|
mov edi,ecx
|
||||||
imul edi,[ebx+Image.Height]
|
imul edi,[ebx+Image.Height]
|
||||||
cmp edi,4096
|
cmp edi,4096
|
||||||
@ -1207,8 +1215,7 @@ endl
|
|||||||
jmp .error
|
jmp .error
|
||||||
@@:
|
@@:
|
||||||
mov [encoded_file],eax
|
mov [encoded_file],eax
|
||||||
mov edi,edx
|
lea edi,[edx-4]
|
||||||
sub edi,4
|
|
||||||
stdcall png_image_write_to_memory, edx,eax,edi,0,[ebx+Image.Data],ecx,0
|
stdcall png_image_write_to_memory, edx,eax,edi,0,[ebx+Image.Data],ecx,0
|
||||||
mov eax,[encoded_file]
|
mov eax,[encoded_file]
|
||||||
mov ecx,[encoded_file_size]
|
mov ecx,[encoded_file_size]
|
||||||
|
Loading…
Reference in New Issue
Block a user