- moved all plugin-related classes to Eithne.Plugin namespace
[FaRetSys.git] / Plugins / Mirror / Mirror.cs
blobdb4df6c876da841ecf84eeab580450f680aae608
1 using System;
2 using System.Xml;
3 using Mono.Unix;
5 namespace Eithne
7 public class MirrorInfo : IInfo
9 public override string Name
11 get { return Catalog.GetString("Mirror"); }
14 public override string ShortName
16 get { return "Mirror"; }
19 public override string Author
21 get { return "Bartosz Taudul"; }
24 public override string Description
26 get { return Catalog.GetString("This plugin adds copies of images which have left half mirrored to the right half."); }
30 public class MirrorFactory : IFactory
32 IInfo _info = new MirrorInfo();
33 public IInfo Info
35 get { return _info; }
38 public IType Type
40 get { return IType.ImgProc; }
43 public void Initialize()
47 public Plugin.Base Create()
49 return new MirrorPlugin();
53 public class MirrorPlugin : Plugin.ImgProc
55 private float progress;
57 public MirrorPlugin()
59 _info = new MirrorInfo();
62 public override void Setup()
66 public override bool HasSetup
68 get { return false; }
71 public override void Work()
73 progress = 0;
74 ICommImage socket = _in[0] as ICommImage;
75 IImage[] img = socket.Images;
76 IImage[] ret = new IImage[img.Length * 2];
78 int[] cat = new int[img.Length * 2];
79 IImage[] origimg = new IImage[img.Length * 2];
81 for(int i=0; i<img.Length; i++)
83 ret[i*2] = img[i];
84 ret[i*2 + 1] = MirrorImage(img[i]);
86 cat[i*2] = socket.Category(i);
87 cat[i*2 + 1] = socket.Category(i);
89 origimg[i*2] = socket.OriginalImage(i);
90 origimg[i*2 + 1] = socket.OriginalImage(i);
92 progress = (float)i/img.Length;
95 _out = new CommSocket(1);
96 _out[0] = new ICommImage(ret, origimg, cat);
98 _workdone = true;
101 private IImage MirrorImage(IImage img)
103 int half = img.W/2;
104 IImage ret = new IImage(img.BPP, half*2, img.H);
106 for(int y=0; y<img.H; y++)
107 for(int x=0; x<half; x++)
109 ret[x, y] = img[x, y];
110 ret[half*2-x-1, y] = img[x, y];
113 return ret;
116 public override int NumIn { get { return 1; } }
117 public override int NumOut { get { return 1; } }
119 public override string DescIn(int n)
121 return Catalog.GetString("Input images.");
124 public override string DescOut(int n)
126 return Catalog.GetString("Input images plus mirror images.");
129 private static string[] matchin = new string[] { "image" };
130 private static string[] matchout = new string[] { "image/rgb", "image/grayscale", "image/float" };
132 public override string[] MatchIn { get { return matchin; } }
133 public override string[] MatchOut { get { return matchout; } }
135 public override float Progress { get { return progress; } }