42 lines
853 B
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;
|
|
}
|