Home | History | Annotate | Download | only in PhoneXamlDirect3DApp1Comp
      1 #pragma once
      2 
      3 #include "pch.h"
      4 #include "BasicTimer.h"
      5 #include "CubeRenderer.h"
      6 #include <DrawingSurfaceNative.h>
      7 #include <ppltasks.h>
      8 #include <windows.storage.streams.h>
      9 #include <opencv2\core\core.hpp>
     10 #include <opencv2\imgproc\imgproc.hpp>
     11 #include <opencv2\features2d\features2d.hpp>
     12 
     13 namespace PhoneXamlDirect3DApp1Comp
     14 {
     15 
     16 public enum class OCVFilterType
     17 {
     18     ePreview,
     19     eGray,
     20     eCanny,
     21     eSepia,
     22     eNumOCVFilterTypes
     23 };
     24 
     25 public delegate void RequestAdditionalFrameHandler();
     26 public delegate void RecreateSynchronizedTextureHandler();
     27 
     28 [Windows::Foundation::Metadata::WebHostHidden]
     29 public ref class Direct3DInterop sealed : public Windows::Phone::Input::Interop::IDrawingSurfaceManipulationHandler
     30 {
     31 public:
     32     Direct3DInterop();
     33 
     34     Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider^ CreateContentProvider();
     35 
     36     // IDrawingSurfaceManipulationHandler
     37     virtual void SetManipulationHost(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ manipulationHost);
     38 
     39     event RequestAdditionalFrameHandler^ RequestAdditionalFrame;
     40     event RecreateSynchronizedTextureHandler^ RecreateSynchronizedTexture;
     41 
     42     property Windows::Foundation::Size WindowBounds;
     43     property Windows::Foundation::Size NativeResolution;
     44     property Windows::Foundation::Size RenderResolution
     45     {
     46         Windows::Foundation::Size get(){ return m_renderResolution; }
     47         void set(Windows::Foundation::Size renderResolution);
     48     }
     49     void CreateTexture(const Platform::Array<int>^ buffer, int with, int height, OCVFilterType filter);
     50 
     51 
     52 protected:
     53     // Event Handlers
     54     void OnPointerPressed(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ sender, Windows::UI::Core::PointerEventArgs^ args);
     55     void OnPointerMoved(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ sender, Windows::UI::Core::PointerEventArgs^ args);
     56     void OnPointerReleased(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ sender, Windows::UI::Core::PointerEventArgs^ args);
     57 
     58 internal:
     59     HRESULT STDMETHODCALLTYPE Connect(_In_ IDrawingSurfaceRuntimeHostNative* host);
     60     void STDMETHODCALLTYPE Disconnect();
     61     HRESULT STDMETHODCALLTYPE PrepareResources(_In_ const LARGE_INTEGER* presentTargetTime, _Out_ BOOL* contentDirty);
     62     HRESULT STDMETHODCALLTYPE GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle);
     63     ID3D11Texture2D* GetTexture();
     64 
     65 private:
     66     CubeRenderer^ m_renderer;
     67     BasicTimer^ m_timer;
     68     Windows::Foundation::Size m_renderResolution;
     69 
     70     void ApplyGrayFilter(const cv::Mat& image);
     71     void ApplyCannyFilter(const cv::Mat& image);
     72     void ApplySepiaFilter(const cv::Mat& image);
     73 
     74     void UpdateImage(const cv::Mat& image);
     75 
     76     cv::Mat Lena;
     77     unsigned int frameWidth, frameHeight;
     78 };
     79 
     80 }
     81