diff options
author | Jay Sorg <jay.sorg@gmail.com> | 2015-08-02 23:10:06 +0300 |
---|---|---|
committer | Jay Sorg <jay.sorg@gmail.com> | 2015-08-02 23:10:06 +0300 |
commit | 6e098d5e8451de848db964ab6f794b75f784f516 (patch) | |
tree | b37b352cf636f798eaebf93072e261041f40037a | |
parent | 38bdebef70381c58ac8b8ae906f17ecd08ad5804 (diff) |
work on painter
-rw-r--r-- | src/painter.c | 6 | ||||
-rw-r--r-- | src/painter_utils.c | 64 | ||||
-rw-r--r-- | src/painter_utils.h | 24 |
3 files changed, 63 insertions, 31 deletions
diff --git a/src/painter.c b/src/painter.c index 53ad9e8..b851d1e 100644 --- a/src/painter.c +++ b/src/painter.c @@ -43,7 +43,7 @@ painter_create(void **handle) pt = (struct painter *) *handle; pt->rop = PT_ROP_S; - return PT_ERROR_NONE; + return PT_ERROR_NONE; } /*****************************************************************************/ @@ -52,10 +52,10 @@ painter_delete(void *handle) { if (handle == NULL) { - return PT_ERROR_NONE; + return PT_ERROR_NONE; } free(handle); - return PT_ERROR_NONE; + return PT_ERROR_NONE; } /*****************************************************************************/ diff --git a/src/painter_utils.c b/src/painter_utils.c index ebcbe23..2b7fdab 100644 --- a/src/painter_utils.c +++ b/src/painter_utils.c @@ -94,22 +94,22 @@ bitmap_get_pixel(struct painter_bitmap *bitmap, int x, int y) } switch (bitmap->format) { - case PT_FORMAT_a8b8g8r8: - return *((unsigned int *) ptr); - case PT_FORMAT_a8r8g8b8: - return *((unsigned int *) ptr); - case PT_FORMAT_r5g6b5: - return *((unsigned short *) ptr); - case PT_FORMAT_a1r5g5b5: - return *((unsigned short *) ptr); - case PT_FORMAT_r3g3b2: - return *((unsigned char *) ptr); case PT_FORMAT_c1: rv = *((unsigned char *) ptr); rv = (rv & (0x80 >> (x % 8))) != 0; return rv; case PT_FORMAT_c8: return *((unsigned char *) ptr); + case PT_FORMAT_r3g3b2: + return *((unsigned char *) ptr); + case PT_FORMAT_a1r5g5b5: + return *((unsigned short *) ptr); + case PT_FORMAT_r5g6b5: + return *((unsigned short *) ptr); + case PT_FORMAT_a8r8g8b8: + return *((unsigned int *) ptr); + case PT_FORMAT_a8b8g8r8: + return *((unsigned int *) ptr); } return 0; } @@ -127,20 +127,20 @@ bitmap_set_pixel(struct painter_bitmap *bitmap, int x, int y, int pixel) } switch (bitmap->format) { - case PT_FORMAT_a8b8g8r8: - *((unsigned int *) ptr) = pixel; + case PT_FORMAT_r3g3b2: + *((unsigned char *) ptr) = pixel; break; - case PT_FORMAT_a8r8g8b8: - *((unsigned int *) ptr) = pixel; + case PT_FORMAT_a1r5g5b5: + *((unsigned short *) ptr) = pixel; break; case PT_FORMAT_r5g6b5: *((unsigned short *) ptr) = pixel; break; - case PT_FORMAT_a1r5g5b5: - *((unsigned short *) ptr) = pixel; + case PT_FORMAT_a8r8g8b8: + *((unsigned int *) ptr) = pixel; break; - case PT_FORMAT_r3g3b2: - *((unsigned char *) ptr) = pixel; + case PT_FORMAT_a8b8g8r8: + *((unsigned int *) ptr) = pixel; break; } return 0; @@ -162,11 +162,8 @@ pixel_convert(int pixel, int src_format, int dst_format, int *palette) } switch (src_format) { - case PT_FORMAT_a8b8g8r8: - SPLIT_a8b8g8r8(pixel, a, r, g, b); - break; - case PT_FORMAT_a8r8g8b8: - SPLIT_a8r8g8b8(pixel, a, r, g, b); + case PT_FORMAT_r3g3b2: + SPLIT_r3g3b2(pixel, a, r, g, b); break; case PT_FORMAT_a1r5g5b5: SPLIT_a1r5g5b5(pixel, a, r, g, b); @@ -174,18 +171,30 @@ pixel_convert(int pixel, int src_format, int dst_format, int *palette) case PT_FORMAT_r5g6b5: SPLIT_r5g6b5(pixel, a, r, g, b); break; - case PT_FORMAT_r3g3b2: - SPLIT_r3g3b2(pixel, a, r, g, b); + case PT_FORMAT_a8r8g8b8: + SPLIT_a8r8g8b8(pixel, a, r, g, b); + break; + case PT_FORMAT_a8b8g8r8: + SPLIT_a8b8g8r8(pixel, a, r, g, b); break; } rv = 0; switch (dst_format) { + case PT_FORMAT_a1r5g5b5: + MAKE_a1r5g5b5(rv, a, r, g, b); + break; + case PT_FORMAT_r5g6b5: + MAKE_r5g6b5(rv, a, r, g, b); + break; case PT_FORMAT_a8r8g8b8: MAKE_a8r8g8b8(rv, a, r, g, b); break; + case PT_FORMAT_a8b8g8r8: + MAKE_a8b8g8r8(rv, a, r, g, b); + break; } - return rv; + return rv; } /*****************************************************************************/ @@ -196,8 +205,7 @@ painter_get_pixel(struct painter *painter, struct painter_bitmap *bitmap, int rv; rv = 0; - if ((x >= 0) && (x < bitmap->width) && - (y >= 0) && (y < bitmap->height)) + if ((x >= 0) && (x < bitmap->width) && (y >= 0) && (y < bitmap->height)) { switch (bitmap->format) { diff --git a/src/painter_utils.h b/src/painter_utils.h index 56f1bd7..8f6c659 100644 --- a/src/painter_utils.h +++ b/src/painter_utils.h @@ -59,6 +59,22 @@ do { \ _b = 0; \ } while (0) +#define MAKE_a1r5g5b5(_c, _a, _r, _g, _b) \ +do { \ + _c = (((_a) & 0xff) >> 7) << 15 | \ + (((_r) & 0xff) >> 3) << 10 | \ + (((_g) & 0xff) >> 3) << 5 | \ + (((_b) & 0xff) >> 3) << 0; \ +} while (0) + +#define MAKE_r5g6b5(_c, _a, _r, _g, _b) \ +do { \ + _c = \ + (((_r) & 0xff) >> 3) << 11 | \ + (((_g) & 0xff) >> 2) << 5 | \ + (((_b) & 0xff) >> 3) << 0; \ +} while (0) + #define MAKE_a8r8g8b8(_c, _a, _r, _g, _b) \ do { \ _c = ((_a) & 0xff) << 24 | \ @@ -67,6 +83,14 @@ do { \ ((_b) & 0xff) << 0; \ } while (0) +#define MAKE_a8b8g8r8(_c, _a, _r, _g, _b) \ +do { \ + _c = ((_a) & 0xff) << 24 | \ + ((_b) & 0xff) << 16 | \ + ((_g) & 0xff) << 8 | \ + ((_r) & 0xff) << 0; \ +} while (0) + struct painter_rect { short x1; |