static void drawSprite16_fromData15(agsurface_t *dib, cgdata *cg, int dx, int dy, int w, int h) { int x, y; WORD pic16; WORD *pic_src = (WORD *)(cg->pic + cg->data_offset); BYTE *pic_dst = GETOFFSET_PIXEL(dib, dx, dy); BYTE *pic_dst_a = GETOFFSET_ALPHA(dib, dx, dy); WORD *yl, pic15; BYTE *ya; for (y = 0; y < h; y++) { yl = (WORD *)(pic_dst + y * dib->bytes_per_line); ya = (BYTE *)(pic_dst_a + y * dib->width); for (x = 0; x < w; x++) { pic16 = *pic_src; pic15 = PIX15(RGB_PIXR16(pic16),RGB_PIXG16(pic16),RGB_PIXB16(pic16)); if (*ya == 255) { *yl = pic15; } else if (*ya > 0) { *yl= ALPHABLEND15(pic15, *yl, *ya); } yl ++; ya++; pic_src++; } pic_src += (cg->width - w); } }
static void image_copyAreaSP16_alphaBlend15(agsurface_t *dib, BYTE *sdata, BYTE *ddata, int w, int h, int lv) { int x, y; WORD *yls, *yld; for (y = 0; y < h; y++) { yls = (WORD *)(sdata + y * dib->bytes_per_line); yld = (WORD *)(ddata + y * dib->bytes_per_line); for (x = 0; x < w; x++) { *yld = ALPHABLEND15(*yls, *yld, lv); yls++; yld++; } } }
static void image_wrapColor15(agsurface_t *dib, BYTE *dst, int w, int h, int col, int rate) { int x, y; WORD *yls, yld; yld = trans_index2pixel(dib->depth, col); for (y = 0; y < h; y++) { yls = (WORD *)(dst + y * dib->bytes_per_line); for (x = 0; x < w; x++) { *yls = ALPHABLEND15(yld, *yls, rate); yls++; } } }
static void image_copyAreaSP16_shadow15(agsurface_t *dib, BYTE *sdata, BYTE *ddata, int w, int h, BYTE *adata, int lv) { int x, y; WORD *yls, *yld; BYTE *yla; for (y = 0; y < h; y++) { yls = (WORD *)(sdata + y * dib->bytes_per_line); yld = (WORD *)(ddata + y * dib->bytes_per_line); yla = (BYTE *)(adata + y * dib->width); for (x = 0; x < w; x++) { *yld = ALPHABLEND15(*yls, *yld, (*yla * lv) / 255); yls++; yld++; yla++; } } }
void image_draw_antialiased_pattern15(agsurface_t *dib, agsurface_t *pattern, int dx, int dy, int dw, int dh, int col) { int x, y; BYTE *dst = GETOFFSET_PIXEL(dib, dx, dy); BYTE *src = (BYTE *)pattern->pixel; WORD *yd; BYTE *ys; for (y = 0; y < dh; y++) { ys = (BYTE *)(src + y * pattern->bytes_per_line); yd = (WORD *)(dst + y * dib->bytes_per_line); for (x = 0; x < dw; x++) { if (*ys != 0) { *yd = ALPHABLEND15(col, *yd, (BYTE)*ys); } ys++; yd++; } } }