Announcing Raster Effects (via ImageMagick)

Dear fellow Inkscape users,
My Google Summer of Code project is now in SVN. My project is "Raster Functionality in Inkscape," which involved integrating ImageMagick libraries into Inkscape, in order to manipulate bitmaps from inside Inkscape.
You'll have to install ImageMagick with Magick++ support (which is default) in order for these new extensions to work.
They can be accessed under the sub-menu "Raster" in the extensions drop-down menu.
The code is not quite in its final state--I am still perfecting and smoothing it out--but it's functional and I'd love to get feedback from all of you, especially from Windows users (because I have not tested it on that OS yet).
Thank you all,
-Christopher Brown

Christopher Brown wrote:
You'll have to install ImageMagick with Magick++ support (which is default) in order for these new extensions to work.
Guess that means I'd have to install ImageMagick just to compile too, eh? Just updated and couldn't compile because of the ImageMagick stuff. Is there some option I can use to turn this off? I don't really want to bother installing it right now. Thanks!
Gail
---
Make error line 179: problem compiling: In file included from src/extension/internal/bitmap/adaptiveThreshold.
h:9,
from src/extension/internal/bitmap/adaptiveThreshold.cpp:12:
src/extension/internal/bitmap/imagemagick.h:14:22: error: Magick++.h: No such file or directory
In file included from src/extension/internal/bitmap/adaptiveThreshold.h:9,
from src/extension/internal/bitmap/adaptiveThreshold.cpp:12:
src/extension/internal/bitmap/imagemagick.h:28: error: 'Magick' has not been declared
src/extension/internal/bitmap/imagemagick.h:28: error: ISO C++ forbids declaration of 'Image' with no type
src/extension/internal/bitmap/imagemagick.h:28: error: expected ';' before '*' token
src/extension/internal/bitmap/imagemagick.h:33: error: 'Magick' has not been declared
src/extension/internal/bitmap/imagemagick.h:33: error: expected ',' or '...' before '*' token
src/extension/internal/bitmap/imagemagick.h:40: error: 'Magick' has not been declared
src/extension/internal/bitmap/imagemagick.h:40: error: expected ',' or '...' before '*' token
In file included from src/extension/internal/bitmap/adaptiveThreshold.cpp:12:
src/extension/internal/bitmap/adaptiveThreshold.h:22: error: 'Magick' has not been declared
src/extension/internal/bitmap/adaptiveThreshold.h:22: error: expected ',' or '...' before '*' token
src/extension/internal/bitmap/adaptiveThreshold.cpp:20: error: variable or field 'applyEffect' declared void
src/extension/internal/bitmap/adaptiveThreshold.cpp:20: error: 'Magick' has not been declared
src/extension/internal/bitmap/adaptiveThreshold.cpp:20: error: 'image' was not declared in this scope

On Fri, 2007-08-10 at 14:43 -0400, Gail Banaszkiewicz wrote:
Christopher Brown wrote:
You'll have to install ImageMagick with Magick++ support (which is default) in order for these new extensions to work.
Guess that means I'd have to install ImageMagick just to compile too, eh? Just updated and couldn't compile because of the ImageMagick stuff. Is there some option I can use to turn this off? I don't really want to bother installing it right now. Thanks!
This is on Windows? I tested to ensure you don't need it on Linux...
--Ted

I don't see how the windows build tool (btool) references the configure.acfile at all. I'll keep looking into it.
On 8/10/07, Gail Banaszkiewicz <gbanaszk@...1686...> wrote:
Ted Gould wrote:
On Fri, 2007-08-10 at 14:43 -0400, Gail Banaszkiewicz wrote:
Guess that means I'd have to install ImageMagick just to compile too, eh? Just updated and couldn't compile because of the ImageMagick stuff. Is there some option I can use to turn this off? I don't really want to bother installing it right now. Thanks!
This is on Windows? I tested to ensure you don't need it on Linux...
Yes, this is on Windows. I rolled back for now.

Sounds great. Sorry I missed you when you were asking about Win32 and the Buildtool. So I tried building it and have it mostly done now.
From a portability side, I have found a couple of thing that need to be tweaked.
In imagemagick.cpp, the first include should be #include <libintl.h> This will work on both Linux and windows and will provide the definition for libintl_printf() that Windows needs.
strndup, stpcpy and strnlen are Linux-only
strndup can be replaced with g_strndup()
For stpcpy() , which returns the tail of the destination string, I would either replace it with some pointer-walking code, like below, or preferably use a Glib::ustring as an output buffer and append the data to it. Slightly slower, but a LOT safer.
I hope Thunderbird doesn't screw up the formatting too much :) ===========================
int formatted_len = raw_len * 78 / 76 + 100; char *formatted = new char[formatted_len]; char *formatted_i = formatted; const char *src;
for (src = "data:image/" ; *src ; ) *formatted_i++ = *src++; for (src = effectedImage.magick().c_str() ; *src ; ) *formatted_i++ = *src++; for (src = ";base64, \n" ; *src ; ) *formatted_i++ = *src++;
int col = 0; while (*raw_i) { *formatted_i++ = *raw_i++; if (col++ > 76) { *formatted_i++ = '\n'; col = 0; } }
if (col) *formatted_i++ = '\n';
*formatted_i = '\0';
======================= /* Being lazy, I prefer this */ Glib::ustring buf = "data:image/"; buf.append(effectedImage.magick()); buf.append(";base64, \n"); int col = 0; while (*raw_i) { buf.push_back(*raw_i++); if (col++ > 76) { buf.push_back('n'); col = 0; } } if (col) buf.push_back('\n');
const char *formatted = (const char *)buf.c_str();
======================
Christopher Brown wrote:
Dear fellow Inkscape users,
My Google Summer of Code project is now in SVN. My project is "Raster Functionality in Inkscape," which involved integrating ImageMagick libraries into Inkscape, in order to manipulate bitmaps from inside Inkscape.
You'll have to install ImageMagick with Magick++ support (which is default) in order for these new extensions to work.
They can be accessed under the sub-menu "Raster" in the extensions drop-down menu.
The code is not quite in its final state--I am still perfecting and smoothing it out--but it's functional and I'd love to get feedback from all of you, especially from Windows users (because I have not tested it on that OS yet).
Thank you all,
-Christopher Brown

On 8/11/07, Bob Jamison <rwjj@...127...> wrote:
Sounds great. Sorry I missed you when you were asking about Win32 and the Buildtool. So I tried building it and have it mostly done now.
From a portability side, I have found a couple of thing that need to be tweaked.
In imagemagick.cpp, the first include should be #include <libintl.h> This will work on both Linux and windows and will provide the definition for libintl_printf() that Windows needs.
strndup, stpcpy and strnlen are Linux-only
strndup can be replaced with g_strndup()
For stpcpy() , which returns the tail of the destination string, I would either replace it with some pointer-walking code, like below, or preferably use a Glib::ustring as an output buffer and append the data to it. Slightly slower, but a LOT safer.
I hope Thunderbird doesn't screw up the formatting too much :)
int formatted_len = raw_len * 78 / 76 + 100; char *formatted = new char[formatted_len]; char *formatted_i = formatted; const char *src;
for (src = "data:image/" ; *src ; ) *formatted_i++ = *src++; for (src = effectedImage.magick().c_str() ; *src ; ) *formatted_i++ = *src++; for (src = ";base64, \n" ; *src ; ) *formatted_i++ = *src++;
int col = 0; while (*raw_i) { *formatted_i++ = *raw_i++; if (col++ > 76) { *formatted_i++ = '\n'; col = 0; } }
if (col) *formatted_i++ = '\n';
*formatted_i = '\0';
======================= /* Being lazy, I prefer this */ Glib::ustring buf = "data:image/"; buf.append(effectedImage.magick()); buf.append(";base64, \n"); int col = 0; while (*raw_i) { buf.push_back(*raw_i++); if (col++ > 76) { buf.push_back('n'); col = 0; } } if (col) buf.push_back('\n');
const char *formatted = (const char *)buf.c_str();
======================
k, did the above, replacing the strndup with the g_ version, and using the /* being lazy */ code for the stpcpy and it compiles ok, but I'm not getting any raster extensions showing on the effects menu here. Is it checking for IM somewhere? I'm gonna guess that the test isnt working right on windows... Let me know and I'll help you try get this working.
Cheers
Sim

On Sun, 2007-08-12 at 20:55 +0100, john cliff wrote:
k, did the above, replacing the strndup with the g_ version, and using the /* being lazy */ code for the stpcpy and it compiles ok, but I'm not getting any raster extensions showing on the effects menu here. Is it checking for IM somewhere? I'm gonna guess that the test isnt working right on windows... Let me know and I'll help you try get this working.
Yeah, there will need to be a "#define WITH_IMAGE_MAGICK 1" somewhere. In the autotools environment it's in config.h if ImageMagick is detected. I'm not sure where this check exists in the custom Windows build tool, sorry, that's all I know.
--Ted

On 8/13/07, Ted Gould <ted@...11...> wrote:
On Sun, 2007-08-12 at 20:55 +0100, john cliff wrote:
k, did the above, replacing the strndup with the g_ version, and using the /* being lazy */ code for the stpcpy and it compiles ok, but I'm not getting any raster extensions showing on the effects menu here. Is it checking for IM somewhere? I'm gonna guess that the test isnt working right on windows... Let me know and I'll help you try get this working.
Yeah, there will need to be a "#define WITH_IMAGE_MAGICK 1" somewhere. In the autotools environment it's in config.h if ImageMagick is detected. I'm not sure where this check exists in the custom Windows build tool, sorry, that's all I know.
--Ted
I'd imagine that wants to go in build.xml or somwhere, but for now I just deleted the checks in init.cpp, thing is I now get a bunch of link errors similar to these:
Make error line 348: LINK problem: build\libinkscape.a(adaptiveThreshold.o):adap tiveThreshold.cpp:(.text+0x124): undefined reference to `Magick::Image::adaptive Threshold(unsigned int, unsigned int, unsigned int)' build\libinkscape.a(addNoise.o):addNoise.cpp:(.text+0x117): undefined reference to `Magick::Image::addNoise(MagickLib::NoiseType)' build\libinkscape.a(blur.o):blur.cpp:(.text+0x11e): undefined reference to `Magi ck::Image::blur(double, double)' build\libinkscape.a(channel.o):channel.cpp:(.text+0x11f): undefined reference to `Magick::Image::channel(MagickLib::ChannelType)' build\libinkscape.a(charcoal.o):charcoal.cpp:(.text+0x11e): undefined reference to `Magick::Image::charcoal(double, double)' build\libinkscape.a(colorize.o):colorize.cpp:(.text+0x21d): undefined reference to `Magick::ColorRGB::ColorRGB(double, double, double)' build\libinkscape.a(colorize.o):colorize.cpp:(.text+0x240): undefined reference to `Magick::Image::colorize(unsigned int, Magick::Color const&)' build\libinkscape.a(colorize.o):colorize.cpp:(.text+0x252): undefined reference to `Magick::ColorRGB::~ColorRGB()' build\libinkscape.a(colorize.o):colorize.cpp:(.text+0x283): undefined reference to `Magick::ColorRGB::~ColorRGB()' build\libinkscape.a(contrast.o):contrast.cpp:(.text+0x10a): undefined reference to `Magick::Image::contrast(unsigned int)' build\libinkscape.a(convolve.o):convolve.cpp:(.text+0x10e): undefined reference to `Magick::Image::convolve(unsigned int, double const*)'
Any ideas anyone?
Cheers
Sim

Well, it's however we want to do it, I guess. You can either:
1) Get ImageMagick for win32. The one on the web site has awful DLL dependencies on it. I suggest you wait until I upload (later tonight, I guess) a new lib bundle with a static ImageMagick in it.
2) Add the /bitmap directory to the <excludes> list for the cc task.
But, yes, if the rest of Inkscape has a code hook to the /bitmap directory, then somewhere you will need to have a switch like that.
Off to work. bbl
bob
john cliff wrote:
On 8/13/07, Ted Gould <ted@...11...> wrote:
On Sun, 2007-08-12 at 20:55 +0100, john cliff wrote:
k, did the above, replacing the strndup with the g_ version, and using the /* being lazy */ code for the stpcpy and it compiles ok, but I'm not getting any raster extensions showing on the effects menu here. Is it checking for IM somewhere? I'm gonna guess that the test isnt working right on windows... Let me know and I'll help you try get this working.
Yeah, there will need to be a "#define WITH_IMAGE_MAGICK 1" somewhere. In the autotools environment it's in config.h if ImageMagick is detected. I'm not sure where this check exists in the custom Windows build tool, sorry, that's all I know.
--Ted
I'd imagine that wants to go in build.xml or somwhere, but for now I just deleted the checks in init.cpp, thing is I now get a bunch of link errors similar to these:
Make error line 348: LINK problem: build\libinkscape.a(adaptiveThreshold.o):adap tiveThreshold.cpp:(.text+0x124): undefined reference to `Magick::Image::adaptive Threshold(unsigned int, unsigned int, unsigned int)' build\libinkscape.a(addNoise.o):addNoise.cpp:(.text+0x117): undefined reference to `Magick::Image::addNoise(MagickLib::NoiseType)' build\libinkscape.a(blur.o):blur.cpp:(.text+0x11e): undefined reference to `Magi ck::Image::blur(double, double)' build\libinkscape.a(channel.o):channel.cpp:(.text+0x11f): undefined reference to `Magick::Image::channel(MagickLib::ChannelType)' build\libinkscape.a(charcoal.o):charcoal.cpp:(.text+0x11e): undefined reference to `Magick::Image::charcoal(double, double)' build\libinkscape.a(colorize.o):colorize.cpp:(.text+0x21d): undefined reference to `Magick::ColorRGB::ColorRGB(double, double, double)' build\libinkscape.a(colorize.o):colorize.cpp:(.text+0x240): undefined reference to `Magick::Image::colorize(unsigned int, Magick::Color const&)' build\libinkscape.a(colorize.o):colorize.cpp:(.text+0x252): undefined reference to `Magick::ColorRGB::~ColorRGB()' build\libinkscape.a(colorize.o):colorize.cpp:(.text+0x283): undefined reference to `Magick::ColorRGB::~ColorRGB()' build\libinkscape.a(contrast.o):contrast.cpp:(.text+0x10a): undefined reference to `Magick::Image::contrast(unsigned int)' build\libinkscape.a(convolve.o):convolve.cpp:(.text+0x10e): undefined reference to `Magick::Image::convolve(unsigned int, double const*)'
Any ideas anyone?
Cheers
Sim

On Mon, 2007-08-13 at 08:07 -0500, Bob Jamison wrote:
- Add the /bitmap directory to the <excludes> list for the cc task.
But, yes, if the rest of Inkscape has a code hook to the /bitmap directory, then somewhere you will need to have a switch like that.
I think this makes sense for now. The init.cpp file won't call the stuff in the bitmap directory unless WITH_IMAGE_MAGICK is set.
--Ted

r15754 So I'm getting a good build on W2K after the following
--- paramcolor.cpp (revision 15754) +++ paramcolor.cpp (working copy) @@ -73,9 +73,9 @@ if (strlen(defaulthex) == 6) { int r = 0, g = 0, b = 0; std::stringstream ss; - ss << strndup(defaulthex, 2); + ss << g_strndup(defaulthex, 2); ss >> std::hex >> r; - ss << strndup(defaulthex + 2, 2); + ss << g_strndup(defaulthex + 2, 2); ss >> std::hex >> g; ss << defaulthex + 4; ss >> std::hex >> b;
--- build.xml (revision 15754) +++ build.xml (working copy) @@ -180,6 +180,7 @@ destdir="${build}/obj"> <fileset dir="${src}"> <!-- THINGS TO EXCLUDE --> + <exclude name="extension/internal/bitmap/.*" /> <exclude name="ast/.*"/> <exclude name="bonobo/.*"/> <exclude name="deptool.cpp"/>
Thanks, Kent
On 8/13/07, Ted Gould <ted@...11...> wrote:
On Mon, 2007-08-13 at 08:07 -0500, Bob Jamison wrote:
- Add the /bitmap directory to the <excludes> list for the cc task.
But, yes, if the rest of Inkscape has a code hook to the /bitmap directory, then somewhere you will need to have a switch like that.
I think this makes sense for now. The init.cpp file won't call the stuff in the bitmap directory unless WITH_IMAGE_MAGICK is set.
--Ted
This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Inkscape-devel mailing list Inkscape-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/inkscape-devel

So does all the stuff below mean that the Win32 build should be working again? It's still not working for me.
Make error line 179: problem compiling: In file included from src/extension/internal/bitmap/adaptiveThreshold.h:9, from src/extension/internal/bitmap/adaptiveThreshold.cpp:12: src/extension/internal/bitmap/imagemagick.h:14:22: error: Magick++.h: No such file or directory In file included from src/extension/internal/bitmap/adaptiveThreshold.h:9, from src/extension/internal/bitmap/adaptiveThreshold.cpp:12: src/extension/internal/bitmap/imagemagick.h:28: error: 'Magick' has not been declared src/extension/internal/bitmap/imagemagick.h:28: error: ISO C++ forbids declaration of 'Image' with no type src/extension/internal/bitmap/imagemagick.h:28: error: expected ';' before '*' token src/extension/internal/bitmap/imagemagick.h:33: error: 'Magick' has not been declared src/extension/internal/bitmap/imagemagick.h:33: error: expected ',' or '...' before '*' token src/extension/internal/bitmap/imagemagick.h:40: error: 'Magick' has not been declared src/extension/internal/bitmap/imagemagick.h:40: error: expected ',' or '...' before '*' token In file included from src/extension/internal/bitmap/adaptiveThreshold.cpp:12: src/extension/internal/bitmap/adaptiveThreshold.h:22: error: 'Magick' has not been declared src/extension/internal/bitmap/adaptiveThreshold.h:22: error: expected ',' or '...' before '*' token src/extension/internal/bitmap/adaptiveThreshold.cpp:20: error: variable or field 'applyEffect' declared void src/extension/internal/bitmap/adaptiveThreshold.cpp:20: error: 'Magick' has not been declared src/extension/internal/bitmap/adaptiveThreshold.cpp:20: error: 'image' was not declared in this scope
--bb
On 8/12/07, Bob Jamison <rwjj@...127...> wrote:
Sounds great. Sorry I missed you when you were asking about Win32 and the Buildtool. So I tried building it and have it mostly done now.
From a portability side, I have found a couple of thing that need to be tweaked.
In imagemagick.cpp, the first include should be #include <libintl.h> This will work on both Linux and windows and will provide the definition for libintl_printf() that Windows needs.
strndup, stpcpy and strnlen are Linux-only
strndup can be replaced with g_strndup()
For stpcpy() , which returns the tail of the destination string, I would either replace it with some pointer-walking code, like below, or preferably use a Glib::ustring as an output buffer and append the data to it. Slightly slower, but a LOT safer.
I hope Thunderbird doesn't screw up the formatting too much :)
int formatted_len = raw_len * 78 / 76 + 100; char *formatted = new char[formatted_len]; char *formatted_i = formatted; const char *src;
for (src = "data:image/" ; *src ; ) *formatted_i++ = *src++; for (src = effectedImage.magick().c_str() ; *src ; ) *formatted_i++ = *src++; for (src = ";base64, \n" ; *src ; ) *formatted_i++ = *src++;
int col = 0; while (*raw_i) { *formatted_i++ = *raw_i++; if (col++ > 76) { *formatted_i++ = '\n'; col = 0; } }
if (col) *formatted_i++ = '\n';
*formatted_i = '\0';
======================= /* Being lazy, I prefer this */ Glib::ustring buf = "data:image/"; buf.append(effectedImage.magick()); buf.append(";base64, \n"); int col = 0; while (*raw_i) { buf.push_back(*raw_i++); if (col++ > 76) { buf.push_back('n'); col = 0; } } if (col) buf.push_back('\n');
const char *formatted = (const char *)buf.c_str();
======================
Christopher Brown wrote:
Dear fellow Inkscape users,
My Google Summer of Code project is now in SVN. My project is "Raster Functionality in Inkscape," which involved integrating ImageMagick libraries into Inkscape, in order to manipulate bitmaps from inside Inkscape.
You'll have to install ImageMagick with Magick++ support (which is default) in order for these new extensions to work.
They can be accessed under the sub-menu "Raster" in the extensions drop-down menu.
The code is not quite in its final state--I am still perfecting and smoothing it out--but it's functional and I'd love to get feedback from all of you, especially from Windows users (because I have not tested it on that OS yet).
Thank you all,
-Christopher Brown
This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Inkscape-devel mailing list Inkscape-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/inkscape-devel

Thanks! Some comments:
- Please add a detailed description of each new effect to http://wiki.inkscape.org/wiki/index.php/ReleaseNotes046#Extension_effects, including the meaning of all parameters
- Please provide in the effects' UI explanatory tooltips and/or "help" tabs explaining the parameters
- Please rewrite all tooltips for the effects to be more informative: e.g. instead of "Apply Noise Effect" write "Add random noise to a bitmap", etc.
- Is it possible to disable the effects unless a bitmap is selected? Ted, I think you planned to work on something like that for verbs - what is the status of that?
- Is this supposed to work on Windows and OSX? What do we need to add to the packages for these to work out of the box?
- Shade and Wave (at least) crash with:
terminate called after throwing an instance of 'Inkscape::Extension::Extension::param_not_exist'
and
terminate called after throwing an instance of 'Inkscape::Extension::Extension::param_not_int_param'

On Sun, 2007-08-12 at 02:52 -0300, bulia byak wrote:
- Is it possible to disable the effects unless a bitmap is selected?
Ted, I think you planned to work on something like that for verbs - what is the status of that?
The biggest is to change SPAction to handle the expose event, and then use it for something useful. But, I started working on other things because I thought everything was going to be changed to GTK Actions... which doesn't seem to have panned out. So, I'll re-add it to my TODO list. It'd be nice for all the effects -- especially those that require paths too.
--Ted

Chris, Ted,
There's one very useful raster effect missing: downsample. In Imagemagick it's done with -geometry, and you can specify different resample algorithms. In Inkscape the size and position of the image must remain the same, but the pixels must become correspondingly larger. Can you please implement this? (Today I really needed this feature!)
Thanks

On 8/10/07, Christopher Brown wrote:
smoothing it out--but it's functional and I'd love to get feedback from all of you, especially from Windows users (because I have not tested it on that OS yet).
What is desirable for me is
a) being able to cancel effect or change its settings at a later stage (because we can do it with SVG filters); b) being able to apply these effects to a group of vector objects (Inkscape would create a bitmap copy of selection and apply changes to it).
Also, "Preview" checkbox is lacking.
And we need all effects be covered in docs. See, I googled for reference on IM effects we use and found only partial description.
Alexandre

On Sat, 2007-08-25 at 01:09 +0400, Alexandre Prokoudine wrote:
a) being able to cancel effect or change its settings at a later stage (because we can do it with SVG filters);
While some of these things can be done with SVG filters, that isn't the goal here. It is to adjust the bitmaps. This is useful for lots of things, but one of them off the top of my head is use an SVG file on a renderer that doesn't support filters. The goal is to provide basic bitmap editing functionality so that you don't have to take your bitmaps into GIMP.
b) being able to apply these effects to a group of vector objects (Inkscape would create a bitmap copy of selection and apply changes to it).
I would be curious what people think about this. I mean, that is one keypress less (no alt-b) but I'm more worried that it would cause confusion for a large group of users.
Also, "Preview" checkbox is lacking.
Since these are using the effects framework that'll come when all the effects have it (hopefully shortly, a few bugs to work out yet).
And we need all effects be covered in docs. See, I googled for reference on IM effects we use and found only partial description.
Yes, more documentation would be good. For now I think the best documentation is in the man page for convert:
http://amath.colorado.edu/computing/software/man/convert.html
The options are all of the filters that are implemented.
--Ted

On 8/25/07, Ted Gould wrote:
While some of these things can be done with SVG filters, that isn't the goal here. It is to adjust the bitmaps. This is useful for lots of things, but one of them off the top of my head is use an SVG file on a renderer that doesn't support filters. The goal is to provide basic bitmap editing functionality so that you don't have to take your bitmaps into GIMP.
Probably I didn't express clearly what I was talking about :)
What I was going to say is that with current approach it's not possible to adjust bitmaps in a non-destructive way like e.g. Scribus does it:
http://img29.picoodle.com/img/img29/9/8/25/f_ScreenshotIm_1755ef2.png
This is not about competing with GIMP or Krita, this is about not breaking creative process in the middle :)
Alexandre

On Sun, 2007-08-26 at 02:11 +0400, Alexandre Prokoudine wrote:
On 8/25/07, Ted Gould wrote:
While some of these things can be done with SVG filters, that isn't the goal here. It is to adjust the bitmaps. This is useful for lots of things, but one of them off the top of my head is use an SVG file on a renderer that doesn't support filters. The goal is to provide basic bitmap editing functionality so that you don't have to take your bitmaps into GIMP.
Probably I didn't express clearly what I was talking about :)
What I was going to say is that with current approach it's not possible to adjust bitmaps in a non-destructive way like e.g. Scribus does it:
http://img29.picoodle.com/img/img29/9/8/25/f_ScreenshotIm_1755ef2.png
This is not about competing with GIMP or Krita, this is about not breaking creative process in the middle :)
Honestly, I'd like to do this for all effects, not just the raster ones. Though, that's a big project. If anyone wants to take it on, I'm for it, but I won't get to it for a little while. I kinda see LPE as the precursor for this, I'm hoping a lot of the code can be reused. Because it's just paths it's a little of a special case, but it is basically the same idea.
--Ted
participants (9)
-
Alexandre Prokoudine
-
Bill Baxter
-
Bob Jamison
-
bulia byak
-
Christopher Brown
-
Gail Banaszkiewicz
-
john cliff
-
Kent Tenney
-
Ted Gould