diff options
| author | Felipe Corr??a da Silva Sanches <juca@members.fsf.org> | 2008-02-21 09:59:35 +0000 |
|---|---|---|
| committer | jucablues <jucablues@users.sourceforge.net> | 2008-02-21 09:59:35 +0000 |
| commit | 34211d295267e0ce8b2d78bdaf7d90237fc3e431 (patch) | |
| tree | 7058b548a7d83642646d5ad0f704a0bab8b27d4e /src | |
| parent | default values for checkbutton, colorbutton, dualspinbutton, spinslider attrW... (diff) | |
| download | inkscape-34211d295267e0ce8b2d78bdaf7d90237fc3e431.tar.gz inkscape-34211d295267e0ce8b2d78bdaf7d90237fc3e431.zip | |
fix for bug #193838 (colormatrix uses premultiplied alpha)
(bzr r4803)
Diffstat (limited to 'src')
| -rw-r--r-- | src/display/nr-filter-colormatrix.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/display/nr-filter-colormatrix.cpp b/src/display/nr-filter-colormatrix.cpp index 61f9970f1..51017ab02 100644 --- a/src/display/nr-filter-colormatrix.cpp +++ b/src/display/nr-filter-colormatrix.cpp @@ -12,6 +12,7 @@ #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 { @@ -36,10 +37,22 @@ int FilterColorMatrix::render(FilterSlot &slot, FilterUnits const &/*units*/) { 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; |
