🙌
C#からMacのネイティブAPIを呼び出す
Xamarin.MacがサポートしていないMacのネイティブAPIがあるので、それをObjectiveC経由で呼び出す。
実装:https://github.com/Atsushi570/dotnet8-macos-playground
呼び出されるObjectiveC側
Vision APIを使ってAPIを行う。
実装の詳細はリポジトリ参照。
#include <CoreGraphics/CoreGraphics.h>
#ifdef __cplusplus
extern "C" {
#endif
// C言語スタイルの関数宣言
const char* performOCROnImage(CGImageRef imageRef);
#ifdef __cplusplus
}
#endif
呼び出すC#側
DLLImportで関数宣言する。
public class ScreenshotOCRProcessor
{
public void PerformOCRFromScreenshot()
{
// スクリーンショットを取得
var screenshot = GetScreenCGImage();
IntPtr resultPtr = PerformOCRWithCGImage(screenshot.Handle);
string ocrResult = Marshal.PtrToStringAuto(resultPtr);
// タイムスタンプを生成
string timestamp = DateTime.Now.ToString("yyyyMMddHHmmss");
File.WriteAllText($"OCRResult_{timestamp}.txt", ocrResult);
}
[DllImport("libOCRProcessor", EntryPoint = "performOCROnImage")]
private static extern IntPtr PerformOCRWithCGImage(IntPtr imageRef);
private CGImage? GetScreenCGImage()
{
return CGImage.ScreenImage(0, CGRect.Infinite, CGWindowListOption.OnScreenOnly, CGWindowImageOption.BestResolution);
}
}
Discussion