aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.ScreenCapture/VectorDifferenceImage.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Tango.ScreenCapture/VectorDifferenceImage.cs')
-rw-r--r--Software/Visual_Studio/Tango.ScreenCapture/VectorDifferenceImage.cs114
1 files changed, 114 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.ScreenCapture/VectorDifferenceImage.cs b/Software/Visual_Studio/Tango.ScreenCapture/VectorDifferenceImage.cs
new file mode 100644
index 000000000..7fa2c82df
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ScreenCapture/VectorDifferenceImage.cs
@@ -0,0 +1,114 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.ScreenCapture
+{
+ public class VectorDifferenceImage
+ {
+ public int Width { get; private set; }
+ public int Height { get; private set; }
+
+ public List<VectorImagePixel> Pixels { get; private set; }
+
+ public VectorDifferenceImage(int width, int height)
+ {
+ Width = width;
+ Height = height;
+ Pixels = new List<VectorImagePixel>();
+ }
+
+ public Bitmap CreateBitmap()
+ {
+ DirectBitmap directBitmap = new DirectBitmap(Width, Height);
+ foreach (var pixel in Pixels)
+ {
+ directBitmap.SetPixel((int)pixel.X, (int)pixel.Y, Color.FromArgb(pixel.R, pixel.G, pixel.B));
+ }
+
+ directBitmap.Dispose();
+ return directBitmap.Bitmap;
+ }
+
+ public void ApplyOnBitmap(Bitmap bitmap)
+ {
+ using (FastBitmap fast = bitmap.FastLock())
+ {
+ foreach (var pixel in Pixels)
+ {
+ fast.SetPixel((int)pixel.X, (int)pixel.Y, Color.FromArgb(pixel.R, pixel.G, pixel.B));
+ }
+ }
+ }
+
+ public byte[] Serialize()
+ {
+ using (MemoryStream ms = new MemoryStream())
+ {
+ using (BinaryWriter writer = new BinaryWriter(ms))
+ {
+ writer.Write(Width);
+ writer.Write(Height);
+ writer.Write(Pixels.Count);
+
+ foreach (var pixel in Pixels)
+ {
+ writer.Write(pixel.X);
+ writer.Write(pixel.Y);
+
+ writer.Write(pixel.R);
+ writer.Write(pixel.G);
+ writer.Write(pixel.B);
+ }
+
+ ms.Position = 0;
+ return ms.ToArray();
+ }
+ }
+ }
+
+ public int CalculateSize()
+ {
+ int size = 0;
+
+ size += sizeof(int) * 3; //Width, Height, Count
+ size += sizeof(ushort) * 2 * Pixels.Count; //X, Y
+ size += sizeof(byte) * 3 * Pixels.Count; //RGB
+
+ return size;
+ }
+
+ public static VectorDifferenceImage Deserialize(byte[] data)
+ {
+ using (MemoryStream ms = new MemoryStream(data))
+ {
+ using (BinaryReader reader = new BinaryReader(ms))
+ {
+ ms.Position = 0;
+ var vector = new VectorDifferenceImage(reader.ReadInt32(), reader.ReadInt32());
+
+ int count = reader.ReadInt32();
+
+ for (int i = 0; i < count; i++)
+ {
+ VectorImagePixel pixel = new VectorImagePixel();
+ pixel.X = reader.ReadUInt16();
+ pixel.Y = reader.ReadUInt16();
+
+ pixel.R = reader.ReadByte();
+ pixel.G = reader.ReadByte();
+ pixel.B = reader.ReadByte();
+
+ vector.Pixels.Add(pixel);
+ }
+
+ return vector;
+ }
+ }
+ }
+ }
+}