[cairo] scale without bluring

Michael Gurnett gurnett at glocalnet.net
Sun Sep 28 23:04:55 PDT 2008


CAIRO_FILTER_FAST gives a slight improvement I think. As to what gives me 
the look I'm after, well StretchBlt looks perfect apart from the fact that 
it basically divides the image along the x axis  into 3 parts. The first 
part doesn't scale at all, The second part looks like it is scaling 
correctly and the 3 part is scaling to much. My guess is that the format of 
the surface is just not compatible with StretchBlt. So in a perfect world 
there would be cairo_stretchblt wich was pure memory manipulation without 
any form filtering.

Michael


----- Original Message ----- 
From: "Vladimir Vukicevic" <vladimir at pobox.com>
To: "Michael Gurnett" <gurnett at glocalnet.net>
Cc: "Antoine Azar" <cairo at antoineazar.com>; <cairo at cairographics.org>
Sent: Monday, September 29, 2008 2:19 AM
Subject: Re: [cairo] scale without bluring


>
> Right, that's what you end up with with bilinear, like I mentioned.   Is 
> there any graphics toolkit that gives you the effect you're looking  for? 
> Nearest neighbour is probably close -- just set  CAIRO_FILTER_FAST before 
> you scale the surface, e.g.  cairo_set_source_surface(...); 
> cairo_pattern_set_filter  (cairo_get_source(cr), CAIRO_FILTER_FAST);
>
>    - Vlad
>
> On Sep 28, 2008, at 3:58 PM, Michael Gurnett wrote:
>
>> This is what I'm getting
>>
>>
>> ----- Original Message ----- From: "Antoine Azar" <cairo at antoineazar.com
>> >
>> To: "'Michael Gurnett'" <gurnett at glocalnet.net>; <cairo at cairographics.org
>> >
>> Sent: Monday, September 29, 2008 12:31 AM
>> Subject: RE: [cairo] scale without bluring
>>
>>
>>> Vlad's correct, I also tried about every mode in Photoshop (which  has 
>>> great
>>> image scaling) and I get horrible results in every case. Check out  the
>>> attached pictures for 3 different modes. Let us know if this is  similar 
>>> to
>>> what you're seeing with Cairo.
>>>
>>> I would recommend not scaling your image 99% but rather resampling  your
>>> data. Although that might not work with your CPU and memory 
>>> requirements.
>>>
>>> Otherwise, you could just append your new data to your original image
>>> (unscaled), and then rescaling to your desired size. You'd have good
>>> quality, but your original image would keep on growing in size in 
>>> memory.
>>>
>>> Cheers,
>>> Antoine
>>>
>>>
>>> -----Original Message-----
>>> From: cairo-bounces at cairographics.org
>>> [mailto:cairo-bounces at cairographics.org] On Behalf Of Michael Gurnett
>>> Sent: Sunday, September 28, 2008 6:13 PM
>>> To: cairo at cairographics.org
>>> Subject: Re: [cairo] scale without bluring
>>>
>>> The data is such that individual spikes are not an issue. The graph  is
>>> basically there so that the user can see the general behaviour of the
>>> currents and voltages of the machines. For a more detailed view the 
>>> user can
>>>
>>> monitor log files that save every second over a 72hr period (alot  of 
>>> data).
>>> I have a moving data window that just shows the last lot of data,  but 
>>> users
>>> do like to see entire data window as well. With the approach as was
>>> attempting here I get a constant behaviour in regards to how long  the 
>>> data
>>> processing takes and also a fairly small use of memory..
>>>
>>> Michael
>>>
>>>
>>> ----- Original Message ----- From: "Vladimir Vukicevic" 
>>> <vladimir at pobox.com
>>> >
>>> To: "Michael Gurnett" <gurnett at glocalnet.net>
>>> Cc: <cairo at cairographics.org>
>>> Sent: Sunday, September 28, 2008 11:57 PM
>>> Subject: Re: [cairo] scale without bluring
>>>
>>>
>>>>
>>>> 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
>>>
>>> _______________________________________________
>>> cairo mailing list
>>> cairo at cairographics.org
>>> http://lists.cairographics.org/mailman/listinfo/cairo
>> <graph.jpg>_______________________________________________
>> cairo mailing list
>> cairo at cairographics.org
>> http://lists.cairographics.org/mailman/listinfo/cairo 



More information about the cairo mailing list