2017-08-25 132 views
0

在“用于Windows Embedded(Compact 2013)”的XAML项目(也称为“Silverlight for Windows Embedded“)如described in this answer.在“用于Windows Embedded(Compact 2013)的XAML”项目中获取图像的可靠来源URI

我使用这些数字作为生成的文件中列出的URI PROJECTNAMEGenerated.rc2。它看起来像这样:

IDR_PROJ_APP    SLWE_XAML DISCARDABLE "XamlPack\\App.Compressed" 
IDR_PROJ_DISCLAIMERPAGE SLWE_XAML DISCARDABLE "XamlPack\\DisclaimerPage.Compressed" 
IDR_PROJ_EASTEREGGPAGE SLWE_XAML DISCARDABLE "XamlPack\\EasterEggPage.Compressed" 
IDR_PROJ_MAINPAGE  SLWE_XAML DISCARDABLE "XamlPack\\MainPage.Compressed" 
IDR_PROJ_MEASUREMENTPAGE SLWE_XAML DISCARDABLE "XamlPack\\MeasurementPage.Compressed" 

105 XAML_RESOURCE DISCARDABLE "..\\Xaml\\Ressources\\BatteryChargerError.png" 
106 XAML_RESOURCE DISCARDABLE "..\\Xaml\\Ressources\\BatteryHigh.png" 
107 XAML_RESOURCE DISCARDABLE "..\\Xaml\\Ressources\\BatteryLow.png" 
108 XAML_RESOURCE DISCARDABLE "..\\Xaml\\Ressources\\disclaimer.png" 
109 XAML_RESOURCE DISCARDABLE "..\\Xaml\\Ressources\\easter.jpg" 

它看起来像数字会改变,如果我添加一个页面或其他图像。

任何想法如何获得一个健壮的URI,我可以使用IXRBitmapImagePtr->SetUriSource(src);(或IXRBitmapImage.SetUriSource(src);)?

我也试图将图像作为资源添加到应用程序并加载它们像这样:

BSTR src = TEXT("#IDB_BATTERY_HIGH_CHARGING"); 
    IXRApplicationPtr app; 
    GetXRApplicationInstance(&app); 
    HINSTANCE instance = App::GetHInstance(); 
    IWICBitmap* img = 0; 
    HRESULT res = app->LoadImageFromResource(instance,src, L"PNG", &img); 
    IXRBitmapImagePtr bitmapImage; 
    app->CreateObject(IID_IXRBitmapImage, &bitmapImage); 
    res = bitmapImage->SetSource(img); 
    m_pBatteryStateImage->SetSource(bitmapImage); 

这将设置一个不同的形象 - 但错误的(并且总是相同的错误之一,无论哪个src我定义)。

回答

0

我找到了解决方案。

再次添加您的资源,以“标准”的资源文件(AppName.rc),并给他们一个ID(你没有复制的文件,你可以使用原来的路径)。

如:

IDB_ERROR PNG      "..\\Xaml\\Ressources\\Error.png" 

然后你可以使用这个ID:

int src = IDB_ERROR; 
IXRApplicationPtr app; 
GetXRApplicationInstance(&app); 
HINSTANCE instance = App::GetHInstance(); 
IWICBitmap* img = 0; 
HRESULT res = app->LoadImageFromResource(instance, MAKEINTRESOURCE(src), L"PNG", &img); 
IXRBitmapImagePtr bitmapImage; 
app->CreateObject(IID_IXRBitmapImage, &bitmapImage); 
res = bitmapImage->SetSource(img); 
m_pBatteryStateImage->SetSource(bitmapImage); 

"Silverlight for Windows Embedded Developer's Guide"说,它可以这样做(但我没有尝试):

bitmapImage->SetUriSource(L"Assets/ninthAve.png"); 

和mybe你必须添加一个“#”:

bitmapImage->SetUriSource(L"#Assets/ninthAve.png"); 
相关问题