#include #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; }