|
|
|
@ -1049,16 +1049,14 @@ static void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int |
|
|
|
|
unsigned char *z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height-1-y : y); |
|
|
|
|
int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes; |
|
|
|
|
|
|
|
|
|
// sorry for not optimizing the other paths
|
|
|
|
|
if(type==0) |
|
|
|
|
{ |
|
|
|
|
if (type==0) { |
|
|
|
|
memcpy(line_buffer, z, width*n); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// first loop isn't optimized since it's just one pixel
|
|
|
|
|
for (i = 0; i < n; ++i) { |
|
|
|
|
switch (type) { |
|
|
|
|
case 0: line_buffer[i] = z[i]; break; |
|
|
|
|
case 1: line_buffer[i] = z[i]; break; |
|
|
|
|
case 2: line_buffer[i] = z[i] - z[i-signed_stride]; break; |
|
|
|
|
case 3: line_buffer[i] = z[i] - (z[i-signed_stride]>>1); break; |
|
|
|
@ -1067,16 +1065,13 @@ static void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int |
|
|
|
|
case 6: line_buffer[i] = z[i]; break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (i=n; i < width*n; ++i) { |
|
|
|
|
switch (type) { |
|
|
|
|
case 0: line_buffer[i] = z[i]; break; |
|
|
|
|
case 1: line_buffer[i] = z[i] - z[i-n]; break; |
|
|
|
|
case 2: line_buffer[i] = z[i] - z[i-signed_stride]; break; |
|
|
|
|
case 3: line_buffer[i] = z[i] - ((z[i-n] + z[i-signed_stride])>>1); break; |
|
|
|
|
case 4: line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-signed_stride], z[i-signed_stride-n]); break; |
|
|
|
|
case 5: line_buffer[i] = z[i] - (z[i-n]>>1); break; |
|
|
|
|
case 6: line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break; |
|
|
|
|
} |
|
|
|
|
switch (type) { |
|
|
|
|
case 1: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-n]; break; |
|
|
|
|
case 2: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-signed_stride]; break; |
|
|
|
|
case 3: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - ((z[i-n] + z[i-signed_stride])>>1); break; |
|
|
|
|
case 4: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-signed_stride], z[i-signed_stride-n]); break; |
|
|
|
|
case 5: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - (z[i-n]>>1); break; |
|
|
|
|
case 6: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|