You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-users@xmlgraphics.apache.org by Julien Beghin <mi...@hotmail.com> on 2010/06/25 12:18:26 UTC

SVG Colors inversion

Hello to all... (and happy summer ^^)

 

Im working on a project using Batik and dealing with SVG !

 

One part of this project consists in a kind of color inversion of some elements in the displayed SVG.

In fact, only black(resp white) have to be converted in  white(resp black).

 

The first solution is to look for each SVG elements in the displayed SVG. For each element we can set the color to white/black.

This solution is really slow ( more than a minute...) and this can't be acceptable.

-> Document state is ALWAYS_DYNAMIC if can help

 

Another idea was to add an overlay, and inverting color of each pixel if required, but the result is not convincing, probably because of antialising and rendering of the graphic, which introduces gray level pixel. These pixel are not inverted by our overlay... and each refresh takes aout 2seconds ( well.. depends on the screen resolution in fact ^^)

 

Do one of you have an idea on how to do this in optimisng performance(speed) and without grahics losts ?

 

ANy help would be appreciated 
 		 	   		  
_________________________________________________________________
La boîte mail NOW Génération vous permet de réunir toutes vos boîtes mail dans Hotmail !
http://www.windowslive.fr/hotmail/nowgeneration/

RE: SVG Colors inversion

Posted by Julien Beghin <mi...@hotmail.com>.
Thanks Thomas,
 

I am going to have a look at the new advices you gave me. 

The CSSS one seems great.

 

I'm gonna try to add this first, as I didn't managed to find a correct matrix doing all the job ;)

>> I'am going to give this a try.
>> And going to try to fidn the matrix I've got to create ^^

>        Filters are worth a try, but you might find that 
> feComponentTransfer is faster and easier to work with. 

>> It's hard to say if this would be more performant, but this might be
>> a good use case for feColorMatrixElement

>      This could work but it involves a lot more work than the 
>feComponentTransfer case (which is just a simple table lookup). 

Yeah in fact it is hard to find the correct matrix to use ! 

>> One part of this project consists in a kind of color inversion of 
>> some elements in the displayed SVG.
>> 
>> In fact, only black(resp white) have to be converted in  white(resp black).

>        This actually sounds like an excellent place to use CSS style sheets. 
>The simplest way (although perhaps not the fastest) would be to use a selector 
>with both descendent, attribute and class bits.  Something like 
>
>        svg[invert=false] .fill { fill: black } 
>        svg[invert=true]  .fill { fill: white } 
>
>        svg[invert=false] .fillStroke { fill: black; stroke: white } 
>        svg[invert=true]  .fillStroke { fill: white; stroke: black } 
>
>        The other possible option would be to use alternate Style sheets 
>that do something similar (might be a little faster). 
>
>        Then simply setting the 'invert' attribute on the root SVG element 
>should cause the colors to swap for all of the elements with an appropriate 
>'class' attribute. 

>       http://www.w3.org/TR/CSS2/selector.html#descendant-selectors



 
 		 	   		  
_________________________________________________________________
Installez gratuitement les nouvelles Emoch'ticones !
http://www.ilovemessenger.fr/emoticones/telecharger-emoticones-emochticones.aspx

RE: SVG Colors inversion

Posted by th...@kodak.com.
Hi Julien,

Julien Beghin <mi...@hotmail.com> wrote on 06/25/2010 09:09:37 AM:

> I'am going to give this a try.
> And going to try to fidn the matrix I've got to create ^^

        Filters are worth a try, but you might find that
feComponentTransfer is faster and easier to work with.

> It's hard to say if this would be more performant, but this might be
> a good use case for feColorMatrixElement

      This could work but it involves a lot more work than the 
feComponentTransfer case (which is just a simple table lookup).

> One part of this project consists in a kind of color inversion of 
> some elements in the displayed SVG.
> 
> In fact, only black(resp white) have to be converted in  white(resp 
black).

        This actually sounds like an excellent place to use CSS style 
sheets.
The simplest way (although perhaps not the fastest) would be to use a 
selector
with both descendent, attribute and class bits.  Something like

        svg[invert=false] .fill { fill: black }
        svg[invert=true]  .fill { fill: white }

        svg[invert=false] .fillStroke { fill: black; stroke: white }
        svg[invert=true]  .fillStroke { fill: white; stroke: black }

        The other possible option would be to use alternate Style sheets
that do something similar (might be a little faster).

        Then simply setting the 'invert' attribute on the root SVG element
should cause the colors to swap for all of the elements with an 
appropriate
'class' attribute.

        http://www.w3.org/TR/CSS2/selector.html#descendant-selectors

RE: SVG Colors inversion

Posted by Julien Beghin <mi...@hotmail.com>.
Why not... 

 

I'am going to give this a try.

And going to try to fidn the matrix I've got to create ^^

Thanks for the hint
 


From: jonathanshawwood@gmail.com
Date: Fri, 25 Jun 2010 07:51:45 -0400
Subject: Re: SVG Colors inversion
To: batik-users@xmlgraphics.apache.org


It's hard to say if this would be more performant, but this might be a good use case for feColorMatrixElement


On Fri, Jun 25, 2010 at 6:18 AM, Julien Beghin <mi...@hotmail.com> wrote:


Hello to all... (and happy summer ^^)

 

Im working on a project using Batik and dealing with SVG !

 

One part of this project consists in a kind of color inversion of some elements in the displayed SVG.

In fact, only black(resp white) have to be converted in  white(resp black).

 

The first solution is to look for each SVG elements in the displayed SVG. For each element we can set the color to white/black.

This solution is really slow ( more than a minute...) and this can't be acceptable.

-> Document state is ALWAYS_DYNAMIC if can help

 

Another idea was to add an overlay, and inverting color of each pixel if required, but the result is not convincing, probably because of antialising and rendering of the graphic, which introduces gray level pixel. These pixel are not inverted by our overlay... and each refresh takes aout 2seconds ( well.. depends on the screen resolution in fact ^^)

 

Do one of you have an idea on how to do this in optimisng performance(speed) and without grahics losts ?

 

ANy help would be appreciated 



Votre vie privée l'est-elle vraiment ? Internet Explorer 8 vous protège gratuitement !
 		 	   		  
_________________________________________________________________
Installez gratuitement les nouvelles Emoch'ticones !
http://www.ilovemessenger.fr/emoticones/telecharger-emoticones-emochticones.aspx

Re: SVG Colors inversion

Posted by jonathan wood <jo...@gmail.com>.
It's hard to say if this would be more performant, but this might be a good
use case for feColorMatrixElement<http://www.w3.org/TR/SVG/filters.html#feColorMatrixElement>

On Fri, Jun 25, 2010 at 6:18 AM, Julien Beghin <mi...@hotmail.com>wrote:

>  Hello to all... (and happy summer ^^)
>
>
>
> Im working on a project using Batik and dealing with SVG !
>
>
>
> One part of this project consists in a kind of color inversion of some
> elements in the displayed SVG.
>
> In fact, only black(resp white) have to be converted in  white(resp black).
>
>
>
> The first solution is to look for each SVG elements in the displayed SVG.
> For each element we can set the color to white/black.
>
> This solution is really slow ( more than a minute...) and this can't be
> acceptable.
>
> -> Document state is ALWAYS_DYNAMIC if can help
>
>
>
> Another idea was to add an overlay, and inverting color of each pixel if
> required, but the result is not convincing, probably because of antialising
> and rendering of the graphic, which introduces gray level pixel. These pixel
> are not inverted by our overlay... and each refresh takes aout 2seconds (
> well.. depends on the screen resolution in fact ^^)
>
>
>
> Do one of you have an idea on how to do this in optimisng
> performance(speed) and without grahics losts ?
>
>
>
> ANy help would be appreciated
>
> ------------------------------
> Votre vie privée l'est-elle vraiment ? Internet Explorer 8 vous protège
> gratuitement ! <http://clk.atdmt.com/FRM/go/232102478/direct/01/>
>