libimg: fix save small png images

git-svn-id: svn://kolibrios.org@7279 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2018-05-15 16:43:23 +00:00
parent e1c7133e38
commit c87db09b6e
2 changed files with 22 additions and 14 deletions

View File

@ -2144,23 +2144,27 @@ endl
mov eax,[edx+png_image.format] mov eax,[edx+png_image.format]
and eax,PNG_FORMAT_FLAG_ALPHA and eax,PNG_FORMAT_FLAG_ALPHA
jz .end0 ;if (..!=0) jz .end0 ;if (..!=0)
; bytep row_end;
; int aindex;
if PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED eq 1 if PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED eq 1
; if ((image->format & PNG_FORMAT_FLAG_AFIRST) != 0) mov eax,[edx+png_image.format]
; { and eax,PNG_FORMAT_FLAG_AFIRST
; aindex = -1; jz .end2 ;if (..!=0)
; ++input_row; /* To point to the first component */ mov [aindex],-1
; ++output_row; inc [input_row] ; To point to the first component
; } inc [output_row]
jmp @f
; else .end2: ;else
end if end if
; aindex = channels; mov eax,[channels]
mov [aindex],eax
.@@:
; Use row_end in place of a loop counter: ; Use row_end in place of a loop counter:
; row_end = output_row + image->width * (channels+1); mov ecx,[channels]
inc ecx
imul ecx,[edx+png_image.width]
add ecx,[output_row]
;ecx = row_end
; while (y-- > 0) ; while (y-- > 0)
; { ; {
@ -2755,11 +2759,11 @@ end if
.end9: ;else .end9: ;else
if 1 ;;; IDAT compress all (only 24 bit) if 1 ;;; IDAT compress all (only 24 bit)
cmp dword[ebx+png_image.height],1
jl .end8
mov ecx,[edx+png_image_write_control.row_bytes] mov ecx,[edx+png_image_write_control.row_bytes]
inc ecx inc ecx
imul ecx,[ebx+png_image.height] imul ecx,[ebx+png_image.height]
cmp ecx,1
jl .end8
stdcall create_compress_IDAT, edi, [edx+png_image_write_control.first_row], ecx, [ebx+png_image.width], [ebx+png_image.height] stdcall create_compress_IDAT, edi, [edx+png_image_write_control.first_row], ecx, [ebx+png_image.width], [ebx+png_image.height]
else ;;; IDAT compress by lines else ;;; IDAT compress by lines
mov ecx,[ebx+png_image.height] mov ecx,[ebx+png_image.height]

View File

@ -1119,6 +1119,10 @@ endl
imul ecx,3 imul ecx,3
mov edi,ecx mov edi,ecx
imul edi,[ebx+Image.Height] imul edi,[ebx+Image.Height]
cmp edi,4096
jge @f
mov edi,4096 ;minimum memory size
@@:
mov [encoded_file_size],edi mov [encoded_file_size],edi
stdcall [mem.alloc],edi stdcall [mem.alloc],edi
test eax,eax test eax,eax