aardio 文档

aardio 范例: 调用 UWP 接口

//调用 UWP 接口 
//标准库 dotNet.ocr, 扩展库 dotNet.toastListener 都运用了以下方法编译 DLL 。
import dotNet.uwpCompiler  

/*
如果参数@2 未指定 Windows.winmd,默认在 C:\Program Files (x86)\Windows Kits\10\UnionMetadata 
最新版本SDK目录下查找此文件,生成的DLL程序集并不依赖 Windows.winmd 文件,仅编译时需要。
*/
var uwpCompiler = dotNet.uwpCompiler( "\ocr.dll" )//"~\lib\dotNet\ocr\.res\ocr.dll" 

//启用编译优化
uwpCompiler.Parameters.CompilerOptions = "/optimize"

//设置待编译C#源码
uwpCompiler.Source = /****** 
using System;
using System.Reflection; 
using System.Collections; 
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks; 
using Windows.Graphics.Imaging;
using Windows.Storage;
using Windows.Storage.Streams;
using System.Runtime.InteropServices;
using Windows.Media.Ocr;

namespace aardio  
{ 
    public class UwpOcrResult
    {

        public UwpOcrResult(OcrResult ocrRet)
        {
            ocrResult = ocrRet; 
        }

        public int LineCount()
        {
            return ocrResult.Lines.Count;
        }

        public string [] GetWords(int index)
        {
            ArrayList arr = new ArrayList();
            foreach (var word in ocrResult.Lines[index].Words)
            {
                arr.Add(word.Text);
            }

            return (string[])arr.ToArray(typeof(string));
        }

        public object GetWordRects(int index)
        {
            ArrayList arr = new ArrayList();
            foreach (var word in ocrResult.Lines[index].Words)
            {
                double[] rc = { word.BoundingRect.Left, word.BoundingRect.Top, word.BoundingRect.Right, word.BoundingRect.Bottom };  
                arr.Add(rc);
            }

            return (object)arr.ToArray(typeof(object));
        }

        private OcrResult ocrResult;

    }

    public class UwpOcrEngine  
    {
        public string [] AvailableRecognizerLanguages(){   
            ArrayList arr = new ArrayList();
            foreach (var lang in OcrEngine.AvailableRecognizerLanguages)
            {
                arr.Add(lang.LanguageTag);
            }
            return (string [])arr.ToArray(typeof( string));
        } 

        public object IsLanguageSupported( string name ){   
            Windows.Globalization.Language lang = new Windows.Globalization.Language(name);
            return OcrEngine.IsLanguageSupported(lang); 
        }

        public UwpOcrResult Recognize(byte[] imgBuffer, string language){   
            return new UwpOcrResult( RecognizeAsync(imgBuffer, language).GetAwaiter().GetResult() );
        }

        async Task<OcrResult> RecognizeAsync(byte[] imgBuffer, string language)
        { 
                var randomAccessStream = new InMemoryRandomAccessStream();
                var outputStream = randomAccessStream.GetOutputStreamAt(0);
                var dw = new DataWriter(outputStream);
                var task = new Task(() => dw.WriteBytes(imgBuffer));
                task.Start();
                await task;
                await dw.StoreAsync();
                await outputStream.FlushAsync();

                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(randomAccessStream);
                SoftwareBitmap softwareBitmap = await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
                Windows.Globalization.Language lang = new Windows.Globalization.Language(language);

                OcrEngine engine = OcrEngine.TryCreateFromLanguage(lang);
                if (engine != null)
                {
                    OcrResult ocrResult = await engine.RecognizeAsync(softwareBitmap);
                    return ocrResult;
                }

                return null;
        }
    }   
} 
******/

//编译并返回程序集  
var assembly = uwpCompiler.CompileOrFail();

import console;
if(assembly) console.logPause("编译成功",uwpCompiler.Parameters.OutputAssembly);

Markdown 格式