onnxruntime/winml/test/common/fileHelpers.cpp
Sheil Kumar 2717c178cc
Fork the WinML APIs into the Microsoft namespace (#3503)
* Migrate winml to Microsoft Namespace (packaging changes are pending)

* add ns_prefix toggle

* fix packaging

* Users/sheilk/add missing raw header (#3484)

* add dualapipartition

* wrong variable for repo root

Co-authored-by: Sheil Kumar <sheilk@microsoft.com>

* remove existence check to force failures

* extra paren

* dualapipartition needs to be referenced from the source

* add microsoft.ai.machinelearning.dll to the output dir

* rename the idl file so that assembly info is correctly added into the winmd

* fix namespaces

* update namespaces

* default to microsoft, and add namespace override as build argument

* update cmakesetings.json as well

* remove from cmakelists.txt

Co-authored-by: Sheil Kumar <sheilk@microsoft.com>
Co-authored-by: Changming Sun <chasun@microsoft.com>
2020-04-17 06:18:54 -07:00

70 lines
2.3 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#include "std.h"
#include "fileHelpers.h"
#include "winrt/Windows.Media.h"
#include "winrt/Windows.Storage.h"
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
using namespace winrt;
using namespace winml;
using namespace wgi;
using namespace ws;
namespace FileHelpers
{
std::wstring GetModulePath()
{
std::wstring val;
wchar_t modulePath[MAX_PATH] = { 0 };
GetModuleFileNameW((HINSTANCE)&__ImageBase, modulePath, _countof(modulePath));
wchar_t drive[_MAX_DRIVE];
wchar_t dir[_MAX_DIR];
wchar_t filename[_MAX_FNAME];
wchar_t ext[_MAX_EXT];
_wsplitpath_s(modulePath, drive, _MAX_DRIVE, dir, _MAX_DIR, filename, _MAX_FNAME, ext, _MAX_EXT);
val = drive;
val += dir;
return val;
}
std::wstring GetWinMLPath()
{
// bool inboxDll = false;
// TODO Add command line parsing
// if (SUCCEEDED(WEX::TestExecution::RuntimeParameters::TryGetValue(L"inbox", inboxDll)) && inboxDll)
// {
// return L"";
// }
return GetModulePath();
}
wgi::SoftwareBitmap GetSoftwareBitmapFromFile(const std::wstring& filePath)
{
auto storageFile = StorageFile::GetFileFromPathAsync(filePath).get();
auto stream = storageFile.OpenAsync(FileAccessMode::Read).get();
auto decoder = BitmapDecoder::CreateAsync(stream).get();
IBitmapFrameWithSoftwareBitmap bitmapFrameWithSoftwareBitmap;
decoder.as(bitmapFrameWithSoftwareBitmap);
auto softwareBitmap = bitmapFrameWithSoftwareBitmap.GetSoftwareBitmapAsync(
BitmapPixelFormat::Bgra8,
BitmapAlphaMode::Ignore,
BitmapTransform::BitmapTransform(),
ExifOrientationMode::IgnoreExifOrientation,
ColorManagementMode::DoNotColorManage
).get();
return softwareBitmap;
}
winml::ImageFeatureValue LoadImageFeatureValue(const std::wstring& imagePath)
{
auto softwareBitmap = FileHelpers::GetSoftwareBitmapFromFile(FileHelpers::GetModulePath() + imagePath);
auto videoFrame = wm::VideoFrame::CreateWithSoftwareBitmap(softwareBitmap);
return ImageFeatureValue::CreateFromVideoFrame(videoFrame);
}
}