libimg/src/upscale.c

42 lines
853 B
C

#include <libimg.h>
#include "libimg-internal.h"
void img_upscale(img_t src, img_t dst, int scale)
{
if(scale < 1) return;
if(!img_target(dst, scale*src.width, scale*src.height)) return;
if(scale == 1)
{
img_render(src, dst);
return;
}
img_pixel_t *src_px = src.pixels;
img_pixel_t *dst_px = dst.pixels;
for(int y=0, sy=0; y < scale*src.height; y++, sy++)
{
if(sy == scale) src_px += src.stride, sy = 0;
for(int x=0, sx=0; x < scale*src.width; x++, sx++)
{
if(sx == scale) src_px++, sx = 0;
if(*src_px != IMG_ALPHA)
dst_px[x] = *src_px;
}
src_px -= (src.width - 1);
dst_px += dst.stride;
}
}
img_t img_upscale_create(img_t src, int scale)
{
if(scale < 1) return NULL_IMG;
img_t dst = img_create(scale * src.width, scale * src.height);
img_fill(dst, IMG_ALPHA);
img_upscale(src, dst, scale);
return dst;
}