Advertisement
Guest User

ezb

a guest
Aug 23rd, 2015
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.44 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using System.Web;
  7. using EZ_B;
  8. using Microsoft.AspNet.SignalR;
  9. using System.Drawing;
  10. using System.Drawing.Imaging;
  11. using System.Threading;
  12.  
  13. namespace ArscolorVr.Hubs
  14. {
  15.     public class VrHub : Hub
  16.     {
  17.         public static EZB Ezb { get; set; }
  18.         public static Camera Camera { get; set; }
  19.  
  20.         public override Task OnConnected()
  21.         {
  22.             Ezb = new EZB();
  23.             Ezb.OnConnectionChange += Ezb_OnConnectionChange;
  24.             var availablePort = EZB.GetAvailableCommunicationPorts(false).LastOrDefault();
  25.             if (availablePort != null)
  26.             {
  27.                 Ezb.Connect(availablePort);
  28.                 if (Camera == null)
  29.                 {
  30.                     Camera = new Camera(Ezb);
  31.                     Camera.OnNewFrame += Camera_OnNewFrame;
  32.                     var devices = Camera.GetVideoCaptureDevices();
  33.                     if (devices.Any())
  34.                         Camera.StartCamera(devices.Last(), 640, 480);
  35.                 }
  36.             }
  37.             return base.OnConnected();
  38.         }
  39.  
  40.         public override Task OnDisconnected(bool stopCalled)
  41.         {
  42.             Ezb.Servo.SetServoPosition(Servo.ServoPortEnum.D2, 50);
  43.             Ezb.Servo.SetServoPosition(Servo.ServoPortEnum.D1, 50);
  44.             Thread.Sleep(1000);
  45.             Ezb.Servo.ReleaseAllServos();
  46.             Ezb.Disconnect();
  47.             return base.OnDisconnected(stopCalled);
  48.         }
  49.  
  50.         public void ChangePosition(int x, int y)
  51.         {
  52.             if (Ezb == null || !Ezb.IsConnected) return;
  53.  
  54.             x = 180 - x;
  55.             x = x + 30;
  56.             y = y + 30;
  57.             x = MyRound(x * 80 / 180);
  58.             y = MyRound(y * 80 / 180);
  59.  
  60.             if (x > 10 && x < 90)
  61.                 Ezb.Servo.SetServoPosition(Servo.ServoPortEnum.D2, x);
  62.             if (y > 10 && y < 90)
  63.                 Ezb.Servo.SetServoPosition(Servo.ServoPortEnum.D1, y);
  64.         }
  65.  
  66.         private void Ezb_OnConnectionChange(bool isConnected)
  67.         {
  68.             if (isConnected)
  69.             {
  70.                 Ezb.Servo.SetServoPosition(Servo.ServoPortEnum.D2, 50);
  71.                 Ezb.Servo.SetServoPosition(Servo.ServoPortEnum.D1, 50);
  72.             }
  73.             else
  74.             {
  75.                 if (Camera != null)
  76.                 {
  77.                     Camera.StopCamera();
  78.                     Camera.OnNewFrame -= Camera_OnNewFrame;
  79.                     Thread.Sleep(1000);
  80.                     Camera.Dispose();
  81.                     Camera = null;
  82.                 }
  83.                 Ezb.Dispose();
  84.             }
  85.         }
  86.  
  87.         private void Camera_OnNewFrame()
  88.         {
  89.             if (Camera == null || !Camera.IsActive)
  90.                 return;
  91.             var base64Image = ImageToBase64(Camera.GetCurrentBitmap, ImageFormat.Jpeg);
  92.             Clients.All.getImage(base64Image);
  93.         }
  94.  
  95.         private static int MyRound(double d)
  96.         {
  97.             return (int)(d + 0.5);
  98.         }
  99.  
  100.         private string ImageToBase64(Image image, ImageFormat format)
  101.         {
  102.             using (var ms = new MemoryStream())
  103.             {
  104.                 image.Save(ms, format);
  105.                 var imageBytes = ms.ToArray();
  106.  
  107.                 var base64String = Convert.ToBase64String(imageBytes);
  108.                 return base64String;
  109.             }
  110.         }
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement