summaryrefslogtreecommitdiff
path: root/source/fitz/output-tga.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/fitz/output-tga.c')
-rw-r--r--source/fitz/output-tga.c42
1 files changed, 33 insertions, 9 deletions
diff --git a/source/fitz/output-tga.c b/source/fitz/output-tga.c
index b5e594b6..8a595265 100644
--- a/source/fitz/output-tga.c
+++ b/source/fitz/output-tga.c
@@ -6,21 +6,45 @@
static inline void tga_put_pixel(fz_context *ctx, fz_output *out, unsigned char *data, int n, int is_bgr)
{
- if (n >= 3 && !is_bgr)
+ switch(n)
{
- fz_putc(ctx, out, data[2]);
+ case 4: /* RGBA or BGRA */
+ if (!is_bgr) {
+ fz_putc(ctx, out, data[2]);
+ fz_putc(ctx, out, data[1]);
+ fz_putc(ctx, out, data[0]);
+ } else {
+ fz_putc(ctx, out, data[0]);
+ fz_putc(ctx, out, data[1]);
+ fz_putc(ctx, out, data[2]);
+ }
+ fz_putc(ctx, out, data[3]);
+ break;
+ case 3: /* RGB or BGR */
+ if (!is_bgr) {
+ fz_putc(ctx, out, data[2]);
+ fz_putc(ctx, out, data[1]);
+ fz_putc(ctx, out, data[0]);
+ } else {
+ fz_putc(ctx, out, data[0]);
+ fz_putc(ctx, out, data[1]);
+ fz_putc(ctx, out, data[2]);
+ }
+ fz_putc(ctx, out, 255);
+ break;
+ case 2: /* GA */
+ fz_putc(ctx, out, data[0]);
+ fz_putc(ctx, out, data[0]);
+ fz_putc(ctx, out, data[0]);
fz_putc(ctx, out, data[1]);
+ break;
+ case 1: /* GA */
fz_putc(ctx, out, data[0]);
- if (n == 4)
- fz_putc(ctx, out, data[3]);
- return;
- }
- if (n == 2)
- {
fz_putc(ctx, out, data[0]);
fz_putc(ctx, out, data[0]);
+ fz_putc(ctx, out, 255);
+ break;
}
- fz_write(ctx, out, data, n);
}
void