using System;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Entities;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.Drawing
{
///
/// Interface IImageProcessor
///
public interface IImageProcessor
{
///
/// Gets the supported input formats.
///
/// The supported input formats.
string[] SupportedInputFormats { get; }
///
/// Gets the image enhancers.
///
/// The image enhancers.
IImageEnhancer[] ImageEnhancers { get; }
///
/// Gets the size of the image.
///
/// The information.
/// ImageSize.
ImageSize GetImageSize(ItemImageInfo info);
ImageSize GetImageSize(ItemImageInfo info, bool allowSlowMethods);
///
/// Gets the size of the image.
///
/// The path.
/// ImageSize.
ImageSize GetImageSize(string path);
///
/// Adds the parts.
///
/// The enhancers.
void AddParts(IEnumerable enhancers);
///
/// Gets the supported enhancers.
///
/// The item.
/// Type of the image.
/// IEnumerable{IImageEnhancer}.
List GetSupportedEnhancers(IHasMetadata item, ImageType imageType);
///
/// Gets the image cache tag.
///
/// The item.
/// The image.
/// Guid.
string GetImageCacheTag(IHasMetadata item, ItemImageInfo image);
///
/// Gets the image cache tag.
///
/// The item.
/// The image.
/// The image enhancers.
/// Guid.
string GetImageCacheTag(IHasMetadata item, ItemImageInfo image, List imageEnhancers);
///
/// Processes the image.
///
/// The options.
/// To stream.
/// Task.
Task ProcessImage(ImageProcessingOptions options, Stream toStream);
///
/// Processes the image.
///
/// The options.
/// Task.
Task> ProcessImage(ImageProcessingOptions options);
///
/// Gets the enhanced image.
///
/// The item.
/// Type of the image.
/// Index of the image.
/// Task{System.String}.
Task GetEnhancedImage(IHasMetadata item, ImageType imageType, int imageIndex);
///
/// Gets the supported image output formats.
///
/// ImageOutputFormat[].
ImageFormat[] GetSupportedImageOutputFormats();
///
/// Creates the image collage.
///
/// The options.
void CreateImageCollage(ImageCollageOptions options);
///
/// Gets a value indicating whether [supports image collage creation].
///
/// true if [supports image collage creation]; otherwise, false.
bool SupportsImageCollageCreation { get; }
IImageEncoder ImageEncoder { get; set; }
void SaveImageSize(string path, DateTime imageDateModified, ImageSize size);
bool SupportsTransparency(string path);
}
}