7 public class DCTInfo
: IInfo
9 public override string Name
11 get { return Catalog.GetString("Discrete Cosine Transform"); }
14 public override string ShortName
19 public override string Author
21 get { return "Bartosz Taudul"; }
24 public override string Description
26 get { return Catalog.GetString("This plugin performs discrete cosine transform."); }
30 public class DCTFactory
: IFactory
32 IInfo _info
= new DCTInfo();
40 get { return IType.ImgProc; }
43 public void Initialize()
47 public Plugin
.Base
Create()
49 return new DCTPlugin();
53 public class DCTPlugin
: Plugin
.ImgProc
55 private bool zero
= true;
56 private float progress
;
60 _info
= new DCTInfo();
63 public override XmlNode Config
65 get { return GetConfig(); }
66 set { LoadConfig(value); }
69 private void UpdateValue(bool z
)
72 _block
.SlotsChanged();
75 public override void Setup()
77 new FFTSetup(zero
, UpdateValue
, true);
80 public override void Work()
84 ICommImage socket
= _in
[0] as ICommImage
;
85 IImage
[] img
= socket
.Images
;
86 IImage
[] res
= new IImage
[img
.Length
];
87 _out
= new CommSocket(1);
89 for(int i
=0; i
<img
.Length
; i
++)
92 progress
= (float)i
/img
.Length
;
95 _out
[0] = new ICommImage(res
, socket
.OriginalImages
, socket
.Categories
);
102 private IImage
DCT(IImage img
)
104 double[] datain
= new double[img
.W
* img
.H
];
105 double[] dataout
= new double[img
.W
* img
.H
];
107 for(int y
=0; y
<img
.H
; y
++)
108 for(int x
=0; x
<img
.W
; x
++)
109 datain
[x
+ y
*img
.W
] = (byte)img
[x
, y
];
111 IntPtr plan
= FFTW
.PlanR2R2D(img
.H
, img
.W
, datain
, dataout
, FFTW
.Kind
.FFTW_REDFT10
,
112 FFTW
.Kind
.FFTW_REDFT10
, 0);
116 FFTW
.DestroyPlan(plan
);
118 IImage ret
= new IImage(BPP
.Float
, img
.W
, img
.H
);
120 for(int y
=0; y
<img
.H
; y
++)
121 for(int x
=0; x
<img
.W
; x
++)
122 ret
[x
, y
] = (float)dataout
[x
+ y
*img
.W
] / 255f
;
130 public override void Lock()
132 FFTW
.mutex
.WaitOne();
135 public override void Unlock()
137 FFTW
.mutex
.ReleaseMutex();
140 private XmlNode
GetConfig()
142 XmlNode root
= _xmldoc
.CreateNode(XmlNodeType
.Element
, "config", "");
145 root
.InnerText
= "1";
147 root
.InnerText
= "0";
152 private void LoadConfig(XmlNode root
)
154 if(root
.InnerText
== "1")
160 public override int NumIn { get { return 1; }
}
161 public override int NumOut { get { return 1; }
}
163 public override string DescIn(int n
)
165 return Catalog
.GetString("Input image.");
168 public override string DescOut(int n
)
170 return Catalog
.GetString("DCT of image.");
173 private static string[] matchin
= new string[] { "image/grayscale" }
;
174 private static string[] matchout
= new string[] { "image/float" }
;
176 public override string[] MatchIn { get { return matchin; }
}
177 public override string[] MatchOut { get { return matchout; }
}
179 public override float Progress { get { return progress; }
}