SZENZOROK érintés Magas szint Pillanatszerű események Tap, DoubleTap, Hold Folyamatos események - Manipulációk Pl. Zoom, Drag
SZENZOROK érintés <Grid Tap="Grid_Tap" DoubleTap="Grid_DoubleTap" Hold="Grid_Hold" ManipulationStarted="Grid_ManipulationStarted" ManipulationDelta="Grid_ManipulationDelta" ManipulationCompleted="Grid_ManipulationCompleted">
SZENZOROK érintés private void Grid_Tap(object sender, GestureEventArgs e) { var position = e.GetPosition(this); } private void Grid_DoubleTap(object sender, GestureEventArgs e) { var position = e.GetPosition(this); } private void Grid_Hold(object sender, GestureEventArgs e) { var position = e.GetPosition(this); }
SZENZOROK érintés private void Grid_ManipulationStarted(object sender, ManipulationStartedEventArgs e) { var startPosition = e.ManipulationOrigin; }
SZENZOROK érintés private void Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) { var startPosition = e.ManipulationOrigin; var scaleTotal = e.CumulativeManipulation.Scale; var scaleDelta = e.DeltaManipulation.Scale; var scaleVelocity = e.Velocities.ExpansionVelocity; var translationTotal = e.CumulativeManipulation.Translation; var translationDelta = e.DeltaManipulation.Translation; var translationVelocity = e.Velocities.LinearVelocity; }
SZENZOROK érintés private void Grid_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) { var startPosition = e.ManipulationOrigin; var scaleTotal = e.TotalManipulation.Scale; var scaleVelocity = e.FinalVelocities.ExpansionVelocity; var translationTotal = e.TotalManipulation.Translation; var translationVelocity = e.FinalVelocities.LinearVelocity; }
SZENZOROK érintés Alacsony szint Touch események Lehetőségünk van arra is, hogy a nyers adatokkal dolgozzunk Ilyenkor megkapjuk az összes érintési pontot és azt kezdünk velük amit akarunk
SZENZOROK érintés Touch.FrameReported += (s, e) => { var primaryTouchPoint = e.GetPrimaryTouchPoint(this); var touchPoints = e.GetTouchPoints(this); var timeStamp = e.Timestamp; };
SZENZOROK helyzetmeghatározás Alacsony szint Gyorsulásmérő Gyorsulás mértéke G-ben mérve az X, Y, Z tengelyek mentén
SZENZOROK helyzetmeghatározás Accelerometer accelerometer = new Accelerometer(); accelerometer.CurrentValueChanged += accelerometer_CurrentValueChanged; try { accelerometer.Start(); } catch { } void accelerometer_CurrentValueChanged(object sender, SensorReadingEventArgs e) { // Gyorsulás a 3 tengely mentén G-ben (9.81 m/s^2) mérve var accelerationVector = e.SensorReading.Acceleration; }
SZENZOROK helyzetmeghatározás Alacsony szint Giroszkóp Forgási sebesség rad/s -ben mérve az X, Y, Z tengelyek körül
SZENZOROK helyzetmeghatározás Gyroscope gyroscope = new Gyroscope(); gyroscope.CurrentValueChanged += gyroscope_CurrentValueChanged; try { gyroscope.Start(); } catch { } void gyroscope_CurrentValueChanged(object sender, SensorReadingEventArgs e) { // Forgás sebessége a 3 tengely körül rad/s-ben mérve var rotationRates = e.SensorReading.RotationRate; // rad/s -> deg/s var rotationDegreeX = MathHelper.ToDegrees(rotationRates.X); var rotationDegreeY = MathHelper.ToDegrees(rotationRates.Y); var rotationDegreeZ = MathHelper.ToDegrees(rotationRates.Z); }
SZENZOROK helyzetmeghatározás Alacsony szint Iránytű Az északi sark iránya a telefonhoz képest, fokban mérve
SZENZOROK helyzetmeghatározás Compass compass = new Compass(); compass.CurrentValueChanged += compass_CurrentValueChanged; try { compass.Start(); } catch { } void compass_CurrentValueChanged(object sender, SensorReadingEventArgs e) { // A Föld mágneses északi pólusa felé mutat (fokban) var magneticNorth = e.SensorReading.MagneticHeading; // A Föld földrajzi északi pólusa felé mutat (fokban) var geographicNorth = e.SensorReading.TrueHeading; }
SZENZOROK helyzetmeghatározás Magas szint Motion API Mivel az alacsony szintű API-kból nem olyan egyszerű érdemi infót kinyerni, kapunk beépítve egy magas absztrakciós szinten mozgó Motion API-t, ami elvégzi helyettünk a sok matekozást.
SZENZOROK helyzetmeghatározás Motion motion = new Motion(); motion.CurrentValueChanged += motion_CurrentValueChanged; try { motion.Start(); } catch { } void motion_CurrentValueChanged(object sender, SensorReadingEventArgs e) { var rotations = e.SensorReading.DeviceRotationRate; // Gyroscope var accelerations = e.SensorReading.DeviceAcceleration; // Accelerometer - Gravity var gravity = e.SensorReading.Gravity; // Gravity var roll = e.SensorReading.Attitude.Roll; // Elforgatás az X tengely körül (radián) var pitch = e.SensorReading.Attitude.Pitch; // Elforgatás az Y tengely körül (radián) var yaw = e.SensorReading.Attitude.Yaw; // Elforgatás a Z tengely körül (radián) // Egy számított mátrix, mely kombinálja az gyorsulásmérő/giroszkóp és az iránytű // méréseit, és megmondja, hogy a telefonunk a Világkoordinátarendszer szerint // hogy áll, merre néz -> AR appoknál nagyon jól tud jönni var rotationMatrix = e.SensorReading.Attitude.RotationMatrix; }
SZENZOROK helymeghatározás PontosságEnergiaigén y Gyorsaság GPS+-- WiFi+/- Cella tornyok -++ Térképészeti felhőszolgáltatások (Bing Maps)
SZENZOROK helymeghatározás GeoCoordinateWatcher gps = new GeoCoordinateWatcher(GeoPositionAccuracy.Default); // Default / High gps.StatusChanged += gps_StatusChanged; gps.PositionChanged += gps_PositionChanged; try { gps.Start(false); } // Figyelmeztetés feldobása catch { } void gps_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e) { GeoPositionStatus status = e.Status; // Disabled / Initializing / NoData / Ready } void gps_PositionChanged(object sender, GeoPositionChangedEventArgs e) { double longitude = e.Position.Location.Longitude; // Hosszúsági fok double latitude = e.Position.Location.Latitude; // Szélességi fok double altitude = e.Position.Location.Altitude; // Magasság (méterben) double speed = e.Position.Location.Speed; // Sebesség double heading = e.Position.Location.Course; // Mozgás iránya az Északi sarkhoz képest (fokban) }
SZENZOROK audió – videó Kamera Használhatjuk az előlapi és a normál kamerát is Fénykép esetén hozzáférés a kameragombhoz, a vakuhoz és a fókuszáláshoz Videó esetén lehetőség, hogy MP4 –be rögzítsük, illetve, hogy szürkeárnyalatos streamet kapjunk a kamerától (Augmented Reality)
SZENZOROK audió – videó PhotoCamera camera = new PhotoCamera(CameraType.Primary); // Primary / FrontFacing // Videó megjelenítése VideoBrush-al VideoBrush videoBrush = new VideoBrush(); videoBrush.SetSource(camera); this.Background = videoBrush; camera.Initialized += (s, e) => { // e.Exception és e.Succeeded // minden más csak ez után történhet }; // Beállítások // Felbontás camera.Resolution = (from resolution in camera.AvailableResolutions where resolution.Height > 720 select resolution).First(); // FlashMode camera.FlashMode = FlashMode.Auto; // Auto / Off / On / RedEyeReduction
SZENZOROK audió – videó // Fókuszálás camera.AutoFocusCompleted += (s, e) => { /* e.Exception és e.Succeeded */ }; camera.Focus(); // Auto-Fókusz camera.CancelFocus(); // Fókuszálás megszakítása camera.FocusAtPoint(240, 400); // Kiválasztott pontra való fókuszálás // Fénykép készítése camera.CaptureThumbnailAvailable += (s, e) => { /* e.ImageStream */ }; camera.CaptureImageAvailable += (s, e) => { /* e.ImageStream */ }; camera.CaptureImage();
SZENZOROK audió – videó // Aktuális képkocka lekérdezése int bufferSize = (int)camera.PreviewResolution.Width * (int)camera.PreviewResolution.Height; int[] ARGBPixelData = new int[bufferSize]; camera.GetPreviewBufferArgb32(ARGBPixelData); // RGB byte[] GrayScalePixelData = new byte[bufferSize]; camera.GetPreviewBufferY(GrayScalePixelData); // Szürkeárnyalatos byte[] YCbCrPixelData = new byte[bufferSize]; camera.GetPreviewBufferYCbCr(YCbCrPixelData); // YCbCr
SZENZOROK audió – videó Mikrofon Lehetőség van hangfelvételre... Vagy akár beszédfelismerésre a Microsoft TellMe felhőszolgáltatásának segítségével