1
//----------------------------------------------------------------------------
2
// Anti-Grain Geometry - Version 2.4 (Public License)
3
// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
5
// Anti-Grain Geometry - Version 2.4 Release Milano 3 (AggPas 2.4 RM3)
6
// Pascal Port By: Milan Marusinec alias Milano
8
// http://www.aggpas.org
9
// Copyright (c) 2005-2006
11
// Permission to copy, use, modify, sell and distribute this software
12
// is granted provided this copyright notice appears in all copies.
13
// This software is provided "as is" without express or implied
14
// warranty, and with no claim as to its suitability for any purpose.
16
//----------------------------------------------------------------------------
17
// Contact: mcseem@antigrain.com
18
// mcseemagg@yahoo.com
19
// http://www.antigrain.com
21
// [Pascal Port History] -----------------------------------------------------
23
// 05.03.2006-Milano: Unit port establishment
25
{ agg_span_image_resample.pas }
27
agg_span_image_resample ;
36
agg_span_image_filter ,
37
agg_span_interpolator_linear ,
38
agg_rendering_buffer ,
44
span_image_resample_ptr = ^span_image_resample;
45
span_image_resample = object(span_image_filter )
50
constructor Construct(alloc : span_allocator_ptr ); overload;
51
constructor Construct(
52
alloc : span_allocator_ptr;
53
src : rendering_buffer_ptr;
54
back_color : aggclr_ptr;
55
interpolator : span_interpolator_ptr;
56
filter : image_filter_lut_ptr ); overload;
58
function _scale_limit : int;
59
procedure scale_limit_(v : int );
61
function _blur_x : double;
62
function _blur_y : double;
63
procedure blur_x_(v : double );
64
procedure blur_y_(v : double );
65
procedure blur_ (v : double );
69
span_image_resample_affine = object(span_image_filter )
79
constructor Construct(alloc : span_allocator_ptr ); overload;
80
constructor Construct(
81
alloc : span_allocator_ptr;
82
src : rendering_buffer_ptr;
83
back_color : aggclr_ptr;
84
interpolator : span_interpolator_ptr;
85
filter : image_filter_lut_ptr ); overload;
87
function _scale_limit : int;
88
procedure scale_limit_(v : int );
90
function _blur_x : double;
91
function _blur_y : double;
92
procedure blur_x_(v : double );
93
procedure blur_y_(v : double );
94
procedure blur_ (v : double );
96
procedure prepare(max_span_len : unsigned ); virtual;
100
{ GLOBAL PROCEDURES }
104
{ LOCAL VARIABLES & CONSTANTS }
105
{ UNIT IMPLEMENTATION }
107
constructor span_image_resample.Construct(alloc : span_allocator_ptr );
109
inherited Construct(alloc );
113
m_blur_x:=image_subpixel_size;
114
m_blur_y:=image_subpixel_size;
119
constructor span_image_resample.Construct(
120
alloc : span_allocator_ptr;
121
src : rendering_buffer_ptr;
122
back_color : aggclr_ptr;
123
interpolator : span_interpolator_ptr;
124
filter : image_filter_lut_ptr );
126
inherited Construct(alloc ,src ,back_color ,interpolator ,filter );
130
m_blur_x:=image_subpixel_size;
131
m_blur_y:=image_subpixel_size;
136
function span_image_resample._scale_limit;
138
result:=m_scale_limit;
143
procedure span_image_resample.scale_limit_;
150
function span_image_resample._blur_x;
152
result:=m_blur_x / image_subpixel_size;
157
function span_image_resample._blur_y;
159
result:=m_blur_y / image_subpixel_size;
164
procedure span_image_resample.blur_x_;
166
m_blur_x:=trunc(v * image_subpixel_size + 0.5 );
171
procedure span_image_resample.blur_y_;
173
m_blur_y:=trunc(v * image_subpixel_size + 0.5 );
178
procedure span_image_resample.blur_;
180
m_blur_x:=trunc(v * image_subpixel_size + 0.5 );
186
constructor span_image_resample_affine.Construct(alloc : span_allocator_ptr );
188
inherited Construct(alloc );
190
m_scale_limit:=200.0;
198
constructor span_image_resample_affine.Construct(
199
alloc : span_allocator_ptr;
200
src : rendering_buffer_ptr;
201
back_color : aggclr_ptr;
202
interpolator : span_interpolator_ptr;
203
filter : image_filter_lut_ptr );
205
inherited Construct(alloc ,src ,back_color ,interpolator ,filter );
207
m_scale_limit:=200.0;
215
function span_image_resample_affine._scale_limit;
217
result:=trunc(m_scale_limit );
222
procedure span_image_resample_affine.scale_limit_;
229
function span_image_resample_affine._blur_x;
236
function span_image_resample_affine._blur_y;
243
procedure span_image_resample_affine.blur_x_;
250
procedure span_image_resample_affine.blur_y_;
257
procedure span_image_resample_affine.blur_;
265
procedure span_image_resample_affine.prepare;
267
scale_x ,scale_y : double;
270
inherited prepare(max_span_len );
272
_interpolator._transformer.scaling_abs(@scale_x ,@scale_y );
274
m_rx :=image_subpixel_size;
275
m_ry :=image_subpixel_size;
276
m_rx_inv:=image_subpixel_size;
277
m_ry_inv:=image_subpixel_size;
279
scale_x:=scale_x * m_blur_x;
280
scale_y:=scale_y * m_blur_y;
282
if scale_x * scale_y > m_scale_limit then
284
scale_x:=scale_x * m_scale_limit / (scale_x * scale_y );
285
scale_y:=scale_y * m_scale_limit / (scale_x * scale_y );
289
if scale_x > 1.0001 then
291
if scale_x > m_scale_limit then
292
scale_x:=m_scale_limit;
294
m_rx :=trunc(scale_x * image_subpixel_size + 0.5 );
295
m_rx_inv:=trunc(1.0 / scale_x * image_subpixel_size + 0.5);
299
if scale_y > 1.0001 then
301
if scale_y > m_scale_limit then
302
scale_y:=m_scale_limit;
304
m_ry :=trunc(scale_y * image_subpixel_size + 0.5 );
305
m_ry_inv:=trunc(1.0 / scale_y * image_subpixel_size + 0.5 );