summaryrefslogtreecommitdiff
path: root/dmagick/c/resample.d
blob: 80dfbb417bbf3bcdc4db98364437423cb80e9d1f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
module dmagick.c.resample;

import dmagick.c.cacheView;
import dmagick.c.exception;
import dmagick.c.image;
import dmagick.c.magickType;
import dmagick.c.magickVersion;
import dmagick.c.pixel;

//A mixin with static if has problems with circular imports. (dmagick.c.image)
version(MagickCore_660) {} else
version(MagickCore_661) {} else
version(MagickCore_662) {} else
version(MagickCore_663) {} else
version(MagickCore_664) {} else
version(MagickCore_665) {} else
{
	version = MagickCore_666_and_up;
}

extern(C)
{
	version ( MagickCore_666_and_up )
	{
		/**
		 * Used to adjust the filter algorithm used when resizing images.
		 * Different filters experience varying degrees of success with
		 * various images and can take significantly different amounts of
		 * processing time. ImageMagick uses the LanczosFilter by default
		 * since this filter has been shown to provide the best results for
		 * most images in a reasonable amount of time. Other filter types
		 * (e.g. TriangleFilter) may execute much faster but may show
		 * artifacts when the image is re-sized or around diagonal lines.
		 * The only way to be sure is to test the filter with sample images.
		 * 
		 * See_Also: $(LINK2 http://www.imagemagick.org/Usage/resize/,
		 *     Resize Filters) in the Examples of ImageMagick Usage.
		 */
		enum FilterTypes
		{
			UndefinedFilter,     ///
			PointFilter,         /// ditto
			BoxFilter,           /// ditto
			TriangleFilter,      /// ditto
			HermiteFilter,       /// ditto
			HanningFilter,       /// ditto
			HammingFilter,       /// ditto
			BlackmanFilter,      /// ditto
			GaussianFilter,      /// ditto
			QuadraticFilter,     /// ditto
			CubicFilter,         /// ditto
			CatromFilter,        /// ditto
			MitchellFilter,      /// ditto
			JincFilter,          /// ditto
			SincFilter,          /// ditto
			SincFastFilter,      /// ditto
			KaiserFilter,        /// ditto
			WelshFilter,         /// ditto
			ParzenFilter,        /// ditto
			BohmanFilter,        /// ditto
			BartlettFilter,      /// ditto
			LagrangeFilter,      /// ditto
			LanczosFilter,       /// ditto
			LanczosSharpFilter,  /// ditto
			Lanczos2Filter,      /// ditto
			Lanczos2SharpFilter, /// ditto
			RobidouxFilter,      /// ditto
			RobidouxSharpFilter, /// ditto
			CosineFilter,        /// ditto
			SplineFilter,        /// ditto
			LanczosRadiusFilter, /// ditto
			SentinelFilter,      // a count of all the filters, not a real filter

			BesselFilter         = JincFilter,
			Lanczos2DFilter      = Lanczos2Filter,
			Lanczos2DSharpFilter = Lanczos2SharpFilter
		}
	}
	else
	{
		enum FilterTypes
		{
			UndefinedFilter,
			PointFilter,
			BoxFilter,
			TriangleFilter,
			HermiteFilter,
			HanningFilter,
			HammingFilter,
			BlackmanFilter,
			GaussianFilter,
			QuadraticFilter,
			CubicFilter,
			CatromFilter,
			MitchellFilter,
			LanczosFilter,
			JincFilter,
			SincFilter,
			KaiserFilter,
			WelshFilter,
			ParzenFilter,
			LagrangeFilter,
			BohmanFilter,
			BartlettFilter,
			SincFastFilter,
			Lanczos2DFilter,
			Lanczos2DSharpFilter,
			RobidouxFilter,
			RobidouxSharpFilter,
			CosineFilter,
			SentinelFilter,  /* a count of all the filters, not a real filter */

			BesselFilter         = JincFilter
		}
	}

	struct ResampleFilter {}

	MagickBooleanType ResamplePixelColor(ResampleFilter*, const double, const double, MagickPixelPacket*);
	MagickBooleanType SetResampleFilterInterpolateMethod(ResampleFilter*, const InterpolatePixelMethod);
	MagickBooleanType SetResampleFilterVirtualPixelMethod(ResampleFilter*, const VirtualPixelMethod);

	ResampleFilter* AcquireResampleFilter(const(Image)*, ExceptionInfo*);
	ResampleFilter* DestroyResampleFilter(ResampleFilter*);

	void ScaleResampleFilter(ResampleFilter*, const double, const double, const double, const double);
	void SetResampleFilter(ResampleFilter*, const FilterTypes, const double);
}