close

c++非同步儲存影像 – Part I 我們提到一個問題

錯誤    C1189    #error:  <future> is not supported when compiling with /clr or /clr:pure.

解法思路:

另外創建一個專案LibAsynSaveCLR(支援CLR)

基本上這個新專案是封裝上一個LibAsynSave專案(不支援CLR)

image

在LibAsynSaveCLR專案屬性->其他include目錄

加入前一個專案LibAsynSave的目錄,後面步驟會引入該專案的標頭檔案


image

在LibAsynSaveCLR專案加入參考LibAsynSave專案

image

這步驟相當於選擇LibAsynSave專案的函式庫

image


標頭檔案: LibAsynSaveCLR.h

必須額外加入”LibAsynSave.h”,

這個步驟很重要,不然LibAsnSaveCLR專案無法呼叫之前LibAsynSave寫好的非同步存檔功能

萬一你找不到LibAsynSave.h應該是在前面"其他include目錄"步驟,忘記加入LibAsynSave專案的資料夾路徑

   1: #pragma once
   2: #ifndef LIBASYNCCLR
   3: #define LIBASYNCCLR
   4: #include "LibAsynSave.h"
   5: #endif
   6:  
   7: namespace Files
   8: {
   9:     void AsynSaveImage(String fileName, Mat img);
  10: }

接下看實作部分

LibAsynSaveCLR.cpp

之前非同步存檔是存在於FileIO命名空間因此必須先引用,這樣才能呼叫SaveImage函式

為了方便區別LibAsynSaveCLR專案和LibAsynSave專案,

所以在此另外新增一個Files命名空間給LibAsynSaveCLR專案

   1: #include "stdafx.h"
   2: #include "LibAsynSaveCLR.h"
   3:  
   4: using namespace FileIO;
   5: namespace Files
   6: {
   7:     void AsynSaveImage(String fileName, Mat img)
   8:     {
   9:         SaveImage(fileName, img);
  10:     }
  11: }

編譯後順利產生LibAsynSave.lib和LibAsynSaveCLR.lib

image


複製LibAsynSave.lib和LibAsynSaveCLR.lib至另一個c++ LibIPCam專案(支援CLR)的目錄下

image

LibIPCam專案屬性設定”其他include目錄”,必須加入LibAsynSaveCLR和LibAsynSave兩個目錄


image

LibIPCam專案屬性設定”連結器”->”輸入”->"其他相依性",

加入 LibAsynSaveCLRLib和LibAsynSave.lib


image


在主專案LibIPCam的標頭檔案加入

#include "LibAsynSaveCLR.h"

同時引入

using namespace Files;


如此才能呼叫AsynSaveImage這個函式(支援CLR專案)


LibIPCam專案中,呼叫方式如下:

// 非同步儲存影像

AsynSaveImage(fileName, img.clone());

傳入fileName(檔案儲存路徑)以及影像來源(img)

就可以以非同步方式儲存影像,

最大好處就是不會讓即時影像串流因為儲存檔案速度太慢,

而卡住主執行緒(影響原有的影像接收)。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 me1237guy 的頭像
    me1237guy

    天天向上

    me1237guy 發表在 痞客邦 留言(0) 人氣()