aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Utils/CallbackOnDispose.cs
blob: a6eebf2f1dd68ea89dea4b212e768b68ee78404a (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
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)

using System;
using System.Diagnostics;
using System.Threading;

namespace Tango.Scripting.Editors.Utils
{
	/// <summary>
	/// Invokes an action when it is disposed.
	/// </summary>
	/// <remarks>
	/// This class ensures the callback is invoked at most once,
	/// even when Dispose is called on multiple threads.
	/// </remarks>
	sealed class CallbackOnDispose : IDisposable
	{
		Action action;
		
		public CallbackOnDispose(Action action)
		{
			Debug.Assert(action != null);
			this.action = action;
		}
		
		public void Dispose()
		{
			Action a = Interlocked.Exchange(ref action, null);
			if (a != null) {
				a();
			}
		}
	}
}
CC.BL.Entities; namespace Tango.UnitTesting.TCC { [TestClass] [TestCategory("TCC")] public class TCC_TST { [TestMethod] public void Detect() { var original_bitmap = Directory.GetCurrentDirectory() + "\\TCC\\TCC Resources\\bitmap.bmp"; using (ColorDetector detector = new ColorDetector()) { DetectionInput input = new DetectionInput() { Columns = 10, Rows = 11, TargetIndex = 99, Bitmap = ByteString.CopyFrom(File.ReadAllBytes(original_bitmap)), RequestColorMatrix = true, RequestDebugImage = true, }; var output = detector.Detect(input); if (input.RequestDebugImage) { using (MemoryStream ms = new MemoryStream(output.DebugBitmap.ToArray())) { var outputBitmap = TemporaryManager.Default.CreateFile(".bmp"); outputBitmap.Persist = true; ms.Position = 0; Bitmap bmp = new Bitmap(ms); bmp.Save(outputBitmap); Process.Start(outputBitmap); } } if (input.RequestColorMatrix) { using (Bitmap colorMatrixBmp = ColorDetector.DetectionOutputToImage(input, output, 300, 320)) { var outputBitmap = TemporaryManager.Default.CreateFile(".bmp"); outputBitmap.Persist = true; colorMatrixBmp.Save(outputBitmap); Process.Start(outputBitmap); } var benchmarksCsvFile = TemporaryManager.Default.CreateFile(".csv"); benchmarksCsvFile.Persist = true; using (CsvFile<DetectionColor> benchmarksRGB = new CsvFile<DetectionColor>(new CsvDestination(benchmarksCsvFile))) { foreach (var color in output.ColorMatrix) { benchmarksRGB.Append(color); } } Helper.ShowInExplorer(benchmarksCsvFile); } } } [TestMethod] public void Test_Database() { using (TCCContext db = new TCCContext(new DataSource() { Address = "localhost\\SQLEXPRESS", Catalog = "TCC", IntegratedSecurity = true, Type = DataSourceType.SQLServer, })) { var device = db.Devices.FirstOrDefault(); Assert.IsNotNull(device); db.SaveChanges(); } } private byte[] GetBitmapData(byte[] bitmap) { using (MemoryStream ms = new MemoryStream(bitmap)) { ms.Position = 0; Bitmap image = new Bitmap(ms); Rectangle area = new Rectangle(0, 0, image.Width, image.Height); BitmapData bitmapData = image.LockBits(area, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); int stride = bitmapData.Stride; IntPtr ptr = bitmapData.Scan0; int numBytes = bitmapData.Stride * image.Height; byte[] rgbValues = new byte[numBytes]; Marshal.Copy(ptr, rgbValues, 0, numBytes); return rgbValues; } } } }