summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 27cd20f)
raw | patch | inline | side by side (parent: 27cd20f)
| author | jucablues <jucablues@users.sourceforge.net> | |
| Thu, 21 Feb 2008 09:59:35 +0000 (09:59 +0000) | ||
| committer | jucablues <jucablues@users.sourceforge.net> | |
| Thu, 21 Feb 2008 09:59:35 +0000 (09:59 +0000) |
| src/display/nr-filter-colormatrix.cpp | patch | blob | history |
index 61f9970f1b2d0072d374283882cf78db62fe7fcf..51017ab029cd8b873b00c51a0e4f9c7fbebde14a 100644 (file)
#include "display/nr-filter-colormatrix.h"
#include "display/nr-filter-units.h"
#include "display/nr-filter-utils.h"
+#include "libnr/nr-blit.h"
#include <math.h>
namespace NR {
NRPixBlock *out = new NRPixBlock;
- nr_pixblock_setup_fast(out, in->mode,
+ nr_pixblock_setup_fast(out, NR_PIXBLOCK_MODE_R8G8B8A8N,
in->area.x0, in->area.y0, in->area.x1, in->area.y1,
true);
+ // this primitive is defined for non-premultiplied RGBA values,
+ // thus convert them to that format before blending
+ if (in->mode != NR_PIXBLOCK_MODE_R8G8B8A8N) {
+ NRPixBlock *original_in = in;
+ in = new NRPixBlock;
+ nr_pixblock_setup_fast(in, NR_PIXBLOCK_MODE_R8G8B8A8N,
+ original_in->area.x0, original_in->area.y0,
+ original_in->area.x1, original_in->area.y1,
+ false);
+ nr_blit_pixblock_pixblock(in, original_in);
+ }
+
unsigned char *in_data = NR_PIXBLOCK_PX(in);
unsigned char *out_data = NR_PIXBLOCK_PX(out);
unsigned char r,g,b,a;