module dmagick.c.compare;

import dmagick.c.exception;
import dmagick.c.geometry;
import dmagick.c.image;
import dmagick.c.magickType;
import dmagick.c.magickVersion;

extern(C)
{
	enum MetricType
	{
		UndefinedMetric,
		AbsoluteErrorMetric,
		MeanAbsoluteErrorMetric,
		MeanErrorPerPixelMetric,
		MeanSquaredErrorMetric,
		PeakAbsoluteErrorMetric,
		PeakSignalToNoiseRatioMetric,
		RootMeanSquaredErrorMetric,
		NormalizedCrossCorrelationErrorMetric,
		FuzzErrorMetric,
		UndefinedErrorMetric = 0,
		PerceptualHashErrorMetric = 0xff
	}

	double* GetImageChannelDistortions(Image*, const(Image)*, const MetricType, ExceptionInfo*);

	Image* CompareImageChannels(Image*, const(Image)*, const ChannelType, const MetricType, double*, ExceptionInfo*);
	Image* CompareImages(Image*, const(Image)*, const MetricType, double*, ExceptionInfo*);
	Image* SimilarityImage(Image*, const(Image)*, RectangleInfo*, double*, ExceptionInfo*);

	static if ( MagickLibVersion >= 0x674 )
	{
		Image* SimilarityMetricImage(Image*, const(Image)*, const MetricType, RectangleInfo*, double*, ExceptionInfo*);
	}

	MagickBooleanType GetImageChannelDistortion(Image*, const(Image)*, const ChannelType, const MetricType, double*, ExceptionInfo*);
	MagickBooleanType GetImageDistortion(Image*, const(Image)*, const MetricType, double*, ExceptionInfo*);
	MagickBooleanType IsImagesEqual(Image*, const(Image)*);
}