環境はVisual Studio 2022です
色々ドハマリしすぎてヤケクソになっていたので色々お許しを
using System.Drawing.Imaging;
using System.IO;
using Windows.Media.Ocr;
namespace OCRTest;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
OcrWin10();
}
public async Task OcrWin10()
{
var Stream = new MemoryStream();
var Image = System.Windows.Forms.Clipboard.GetImage();
if (Image == null)
{
label1.Text = "画像ファイルがグリップボードにありません";
return;
}
Image.Save(Stream, ImageFormat.Png);
var RandomStream = WindowsRuntimeStreamExtensions.AsRandomAccessStream(Stream);
var decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(RandomStream);
OcrEngine ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages();
var OcrResult = await ocrEngine.RecognizeAsync(await decoder.GetSoftwareBitmapAsync());
label1.Text = OcrResult.Text;
}
}
クリップボードの画像を取得してラベルにOCR結果を表示するというものです
Microsoft.Windows.CsWinRTをnugetから落としまくってください
https://www.nuget.org/packages/Microsoft.Windows.CsWinRT/2.2.0?_src=template
おまけ
bufferやunsafeコードを使ってる方々がいっぱいいたんですけど
https://learn.microsoft.com/ja-jp/windows/uwp/audio-video-camera/imaging#create-or-edit-a-softwarebitmap-programmatically
Bufferが取れん爆破したるぞとか思っていたら
なんか二つおんなじ名前のブツが出てきたり(Bufferが取れるのは下のXamlの方)
unsafeはコピペで使うの怖いし...
丸々半日掛かってようやく書けた...
私が使いたかった用途だと精度が低くて使えなかった。私の半日...
Win10標準機能のOcrはもっと別の用途だと使えるのかもしれないが、ちっちゃめのスクショを読み取るのはあまりに無謀だったようだ