summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/pdfinput/svg-builder.cpp
diff options
context:
space:
mode:
authormiklosh <miklosh@users.sourceforge.net>2007-08-19 18:35:04 +0000
committermiklosh <miklosh@users.sourceforge.net>2007-08-19 18:35:04 +0000
commit3d25b8d393e9c374c58dc2eea720a587d306c0eb (patch)
tree4aee05dbc2cfb4e8874468af22c5c8109c59fcad /src/extension/internal/pdfinput/svg-builder.cpp
parentNeed to link with libcairo.dll.a rather than cairo.lib (diff)
downloadinkscape-3d25b8d393e9c374c58dc2eea720a587d306c0eb.tar.gz
inkscape-3d25b8d393e9c374c58dc2eea720a587d306c0eb.zip
Corrected image mask generation
(bzr r3529)
Diffstat (limited to 'src/extension/internal/pdfinput/svg-builder.cpp')
-rw-r--r--src/extension/internal/pdfinput/svg-builder.cpp42
1 files changed, 14 insertions, 28 deletions
diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp
index 7f801d4b4..d5db5489d 100644
--- a/src/extension/internal/pdfinput/svg-builder.cpp
+++ b/src/extension/internal/pdfinput/svg-builder.cpp
@@ -1408,39 +1408,25 @@ Inkscape::XML::Node *SvgBuilder::_createImage(Stream *str, int width, int height
image_stream->reset();
// Convert grayscale values
- unsigned char *buffer = NULL;
- if ( color_map || invert_alpha ) {
- buffer = new unsigned char[width];
- }
- if ( color_map ) {
- for ( int y = 0 ; y < height ; y++ ) {
- unsigned char *row = image_stream->getLine();
+ unsigned char *buffer = new unsigned char[width];
+ int invert_bit = invert_alpha ? 1 : 0;
+ for ( int y = 0 ; y < height ; y++ ) {
+ unsigned char *row = image_stream->getLine();
+ if (color_map) {
color_map->getGrayLine(row, buffer, width);
- if (invert_alpha) {
- unsigned char *buf_ptr = buffer;
- for ( int x = 0 ; x < width ; x++ ) {
- *buf_ptr++ = ~(*buf_ptr);
- }
- }
- png_write_row(png_ptr, (png_bytep)buffer);
- }
- } else {
- for ( int y = 0 ; y < height ; y++ ) {
- unsigned char *row = image_stream->getLine();
- if (invert_alpha) {
- unsigned char *buf_ptr = buffer;
- for ( int x = 0 ; x < width ; x++ ) {
- *buf_ptr++ = ~row[x];
+ } else {
+ unsigned char *buf_ptr = buffer;
+ for ( int x = 0 ; x < width ; x++ ) {
+ if ( row[x] ^ invert_bit ) {
+ *buf_ptr++ = 0;
+ } else {
+ *buf_ptr++ = 255;
}
- png_write_row(png_ptr, (png_bytep)buffer);
- } else {
- png_write_row(png_ptr, (png_bytep)row);
}
}
+ png_write_row(png_ptr, (png_bytep)buffer);
}
- if (buffer) {
- delete buffer;
- }
+ delete buffer;
} else if (color_map) {
image_stream = new ImageStream(str, width,
color_map->getNumPixelComps(),