跳轉到主要內容
此方法會開啟使用者先前載入至全域記憶體的影像檔案,並將該檔案對應的頁面新增至文件。

語法

C++

Linux 與 macOS
HRESULT  AddImageFileFromMemory(
  void*                   DataPtr,
  __int64                 DataSize,
  IImagePasswordCallback* Callback,
  IPrepareImageMode*      PrepareMode,
  IIntsCollection*        PageIndices,
  BSTR                    FileName
);
Windows
HRESULT  AddImageFileFromMemory(
  __int64                 HGlobal,
  IImagePasswordCallback* Callback,
  IPrepareImageMode*      PrepareMode,
  IIntsCollection*        PageIndices,
  BSTR                    FileName
);

C#

void AddImageFileFromMemory(
  Int64                  HGlobal,
  IImagePasswordCallback Callback,
  IPrepareImageMode       PrepareMode,
  IIntsCollection         PageIndices,
  string                 FileName
);

Visual Basic .NET

Sub AddImageFileFromMemory( _
  HGlobal As Int64, _
  Callback As IImagePasswordCallback, _
  [PrepareMode As IPrepareImageMode = Nothing], _
  [PageIndices As IIntsCollection = Nothing], _
  [FileName As String = "0"] _
)

參數

DataPtr [in] Linux:指定包含影像檔案之記憶體區塊的位址。 DataSize [in] Linux:指定載入記憶體中的影像大小。 HGlobal [in] macOS 和 Windows:指定包含影像檔案之記憶體區塊的 HGLOBAL Handle。此 Handle 會以 __int64 傳遞。此 Handle 必須為有效值。 Callback [in] 此變數指向由使用者實作、型別為 ImagePasswordCallback 的物件介面,用於處理存取 PDF 格式影像時可能出現的密碼要求。此參數為選用,且可為 0;在此情況下,將無法處理受密碼保護的檔案。 PrepareMode [in] 指的是 PrepareImageMode 物件,用於指定影像在開啟期間如何進行預先處理。此參數為選用,且可為 0;在此情況下,會使用預設參數,或者若已載入某個 profile,則會使用該 profile 所設定的參數。 PageIndices [in] 此參數指的是 IntsCollection 物件,用於指定必須新增至文件的頁面索引。請注意,不允許重複的索引。若要將同一頁面新增多次,請多次呼叫此方法。
此參數為選用,且可為 0;在此情況下,開啟檔案中的所有頁面都會新增至文件。
FileName [in] 指定影像檔案的名稱。若未明確指定,此資訊會用於判定檔案格式,並顯示在錯誤訊息中。此參數為選用,且可為 0。 若要開啟 office 格式 (僅限 Linux 和 Windows) ,請傳入包含副檔名的文件名稱。

回傳值

此方法沒有特定的回傳值。它會回傳 ABBYY FineReader Engine 函式的標準回傳值

備註

  • SVG 格式的檔案無法從記憶體中開啟。
  • 使用此方法開啟 PDF Portfolio 檔案時,其封面一律會包含在輸出檔案中。
  • 此方法可能會將事件通知附加至 FRDocument 物件之 IConnectionPointContainer 介面的監聽程式。
  • 適用於 Linux 和 Windows:
  • 在 Windows 上,此方法不支援開啟與 WIC 相容的檔案。

範例

// 此範例示範如何將影像檔載入記憶體
// 然後新增至 FineReader Engine 進行處理
...
// 在此程式碼範例中,我們使用 System.IO 命名空間來操作記憶體中的檔案
using System.IO;
// 並使用 System.Runtime.InteropServices 命名空間來處理記憶體中的區塊
using System.Runtime.InteropServices;
...
// 我們假設已經建立了 Engine 物件
// 建立文件
FREngine.IFRDocument document = engine.CreateFRDocument();
// 來源影像
string imagePath = "D:\\Demo.tif";
FileInfo file = new FileInfo(imagePath);
// 來源影像的大小
long len = file.Length;
// 開啟影像
BinaryReader br = new BinaryReader(File.Open(imagePath, FileMode.Open));
// 從目前的資料流讀取指定數量的位元組到位元組陣列中
byte[] byteArray = br.ReadBytes((int)len);
// 配置一塊記憶體
IntPtr handle = Marshal.AllocHGlobal((int)len);
// 將資料從非受控記憶體指標複製到受控的 32 位元帶正負號整數陣列
Marshal.Copy(byteArray, 0, handle, (int)len);
// 將記憶體中的影像新增至文件
document.AddImageFileFromMemory((Int64)handle, null, null, null, "Demo.tif");
// 釋放先前從處理序的非受控記憶體配置的記憶體
Marshal.FreeHGlobal(handle);
// 辨識文件
document.Process(null);

另請參見

FRDocument