Конвертировать win32 hbitmap в winrt

Я реализую функцию OCR и мне нужно использовать softwarebitmap для вызова функции, в случае, если у меня есть путь к файлу, нет проблем с созданием объекта softwarebitmap, но в некоторых случаях нет физического файла, и у меня есть win32 hbitmap, который можно преобразовать в буфер памяти, может ли кто-нибудь помочь мне преобразовать hbitmap или буфер памяти в softwarebitmap для вызова функции OCR.

std::future<hstring> AsyncSample(const std::wstring &path){

auto file = co_await StorageFile::GetFileFromPathAsync(path);

auto stream = co_await file.OpenAsync(FileAccessMode::Read);

auto decoder = co_await BitmapDecoder::CreateAsync(stream);

auto bitmap = co_await decoder.GetSoftwareBitmapAsync();

auto engine = OcrEngine::TryCreateFromUserProfileLanguages();

auto result = co_await engine.RecognizeAsync(bitmap);

return result.Text();}

0

Решение

Я нашел решение

winrt::Windows::Storage::Streams::IBuffer*
Conversion::CreateNativeBuffer(LPVOID lpBuffer, DWORD
nNumberOfBytes)
{
Microsoft::WRL::ComPtr<NativeBuffer> nativeBuffer;
Microsoft::WRL::Details::MakeAndInitialize<NativeBuffer>
(&nativeBuffer, (BYTE *)lpBuffer, nNumberOfBytes);
auto iinspectable = (IInspectable *)reinterpret_cast<IInspectable *>
(nativeBuffer.Get());
winrt::Windows::Storage::Streams::IBuffer *buffer =
reinterpret_cast<winrt::Windows::Storage::Streams::IBuffer *>(iinspectable);
return buffer;
}

и в основной функции

std::future<hstring> getTextFromBufferImage(CHAR *img, DWORD imgLength)
{
Conversion *tConv = new Conversion();
static Windows::Storage::Streams::IBuffer *stream;//::IBuffer *iBuffer;
stream = tConv->CreateNativeBuffer(img, imgLength);
SoftwareBitmap bitmap(BitmapPixelFormat::Rgba16, 30, 30);
bitmap.CopyFromBuffer(*stream);
auto engine = OcrEngine::TryCreateFromUserProfileLanguages();
auto result = co_await engine.RecognizeAsync(bitmap);

return result.Text();
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]