[cairo] scale without bluring

Vladimir Vukicevic vladimir at pobox.com
Sun Sep 28 14:57:06 PDT 2008


On Sep 28, 2008, at 2:41 PM, Michael Gurnett wrote:

>> I have to copy the old picture, To much data to redraw all over  
>> again. I'm
>> scaling down along the x-axis adding a a bit more data and then  
>> scaling and
>> adding data and so on.
>

That's never going to give you a reasonable result, though -- you're  
filtering the image each time you add data, and losing tons of data.   
With either nearest neighbour or bilinear filtering, there'll be  
something wrong... with nearest, it'll easily hide big spikes in your  
data graph, if that column happens to be skipped due to rounding.   
With bilinear, it'll just blur your graph to nothing useful.

> Should I be using patterns instead. I've been using
>
>    cairo_set_source_surface (cr_buffer, surface_current, 0, 0);
>  cairo_paint(cr_buffer);

Shouldn't matter.  You should probably rethink the way that you're  
rendering data.. for example, instead of rescaling for each data  
point, add in a new chunk at a time... e.g. maybe 25% of your total  
width -- when you fill it up, compute averages of the previously  
received data and draw it into the first 75%, then start filling up  
the new 25% using the same average window.

    - Vlad

> ----- Original Message -----
> From: "Chris Wilson" <chris at chris-wilson.co.uk>
> To: "Michael Gurnett" <gurnett at glocalnet.net>
> Cc: <cairo at cairographics.org>
> Sent: Sunday, September 28, 2008 10:47 PM
> Subject: Re: [cairo] scale without bluring
>
>
>> On Sun, 2008-09-28 at 21:32 +0200, Michael Gurnett wrote:
>>> Have been struggleing with this for a while now and could do with  
>>> some
>>> pointers. I rescaling a graph by 0.99 over and over again in the x
>>> directions. When I do this the image blurs out and in the end the  
>>> data
>>> is lossed. I tried using StretchBlt but this just not seem to be
>>> compatible with the format of the cr. It doesn't blur but i doesn't
>>> scale correctly. I've tried turning off antialising but that does  
>>> not
>>> seem to help either. Any hints on how to scale without blurring.Is
>>> there a StretchBlt equivalent in cairo that I have missed?
>>
>> You haven't mentioned it, so I assume you've not tried setting
>> CAIRO_FILTER_NEAREST on the source pattern. Although I have to ask,  
>> why
>> are you rescaling the graph and not redrawing?
>>
>> -- 
>> Chris Wilson
> _______________________________________________
> cairo mailing list
> cairo at cairographics.org
> http://lists.cairographics.org/mailman/listinfo/cairo



More information about the cairo mailing list