[fpc-pascal] fpimage blur
Mattias Gaertner
nc-gaertnma at netcologne.de
Fri Jun 1 09:32:22 CEST 2012
On Thu, 31 May 2012 20:42:35 +0100
Graeme Geldenhuys <graemeg.lists at gmail.com> wrote:
> On 31 May 2012 12:35, Mattias Gaertner <nc-gaertnma at netcologne.de> wrote:
> >
> > Can you give an example or some pseudocode?
>
>
> I just moved country, so don't have access to my development pc yet
> (still in shipping), so can't get hold of a working code example. So
> best I can do is code example from memory... it was something like
> this.
>
>
> Untested code follows...
>
> ------------------------
> program project1;
>
> {$mode objfpc}{$H+}
>
> uses
> {$IFDEF UNIX}{$IFDEF UseCThreads}
> cthreads,
> {$ENDIF}{$ENDIF}
> Classes, fpcanvas, fpimage, FPReadBMP, FPWriteBMP;
>
> {$R *.res}
>
> type
> { to make Initialize public, though FImage field variable is all we
> need access to }
> TMyInterpolation = class(TMitchelInterpolation)
> public
> procedure Initialize(aimage: TFPCustomImage; acanvas: TFPCustomCanvas);
> override;
> end;
>
> var
> img: TFPMemoryImage;
> inter: TMyInterpolation;
>
> { TMyInterpolation }
>
> procedure TMyInterpolation.Initialize(aimage: TFPCustomImage;
> acanvas: TFPCustomCanvas);
> begin
> inherited Initialize(aimage, acanvas);
> end;
>
> begin
> img := TFPMemoryImage.Create(32, 32);
> inter := TMyInterpolation.Create;
> try
> img.LoadFromFile('testin.bmp');
> inter.Initialize(img, nil); { associate the memory image to
> interpolation class }
> inter.Execute(0, 0, 32, 32); { define rectangle or whole image
> and exec interpolation }
> img.SaveToFile('testout.bmp');
> finally
> inter.Free;
> img.Free;
> end;
> end.
>
> -------------------------
>
>
> I hope this gives you the general idea. As I mentioned, I have done
> something similar before, and from what I remember, it wasn't to hard
> to get working.
The interpolation is only for scaling, isn't it?
Do you mean: down sample, gaussian blur, up sample?
That would give a fast algorithm, with only a small memory need. But I
fear the results won't be pretty.
> Alternatively, AggPas also has many filter/blur/interpolation
> functions available. There are a few AggPas demos showing this in
> action.
Yep, Aggpas seems to have the right algorithm.
Thanks, this gives me some ideas to continue.
Mattias
More information about the fpc-pascal
mailing list