如何在Pi上显示USB上的随机图像

时间:2015-10-14 04:53:44

标签: vb.net raspberry-pi iot windows-10-iot-core

我设法创建了我的第一个iot项目,并且可以在我的Raspberry Pi2上按下按钮时加载图像。

我试图将代码放在一起,这些代码会从一组图像中获取一个随机图像,但我有一些区域,我正在摔倒。

1)我不知道如何从Pi扫描USB记忆棒

2)我似乎无法从文件加载图像,只能从嵌入式资源加载。

3)我似乎无法弄清楚如何关闭应用程序,我原以为App.exit会这么做但是看起来不是。

基本上我只是在玩耍,我认为一个好的学习项目是创建一个随机显示USB记忆棒图像的数码相框,它根本不适合我。

如果我可以按下按钮按下它,我应该可以放入计时器并让它一直很容易运行。

这是我的代码,您可以从我注释掉的部分中看到我尝试过的内容:

' The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
''' <summary>
''' An empty page that can be used on its own or navigated to within a Frame.
''' </summary>

Public NotInheritable Class MainPage
    Inherits Page
    Dim random As Random = New Random()

    Private Sub ClickMe_Click(sender As Object, e As RoutedEventArgs)
        'Dim DirectoryPath As String = "F:/VB.Net files/Images/"
        'Dim finfo As FileInfo = New FileInfo(GetRandomImageFilePath(DirectoryPath))
        'Dim filename As String = finfo.Name.Replace(finfo.Extension, "")
        'BBPLogo.Source = New BitmapImage(New Uri("file:///" & finfo.FullName, UriKind.Relative))
        BBPLogo.Source = New BitmapImage(New Uri("ms-appx:///Assets/Bowral-Bricks.png", UriKind.Absolute))
    End Sub

    Private Sub ExitButton_Click(sender As Object, e As RoutedEventArgs) Handles ExitButton.Click

    End Sub

    Public Function GetRandomImageFilePath(ByVal folderPath As String) As String
        Dim files() As String = Directory.GetFiles(folderPath, "*.png")
        Return files(random.Next(0, files.Length))
    End Function

End Class

不确定是否需要它,但这里是xaml

<Page
    x:Class="PiTest01.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:PiTest01"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" Height="480" Width="800">

    <Grid>
        <Grid.Background>
            <ImageBrush Stretch="Fill"/>
        </Grid.Background>
        <Image x:Name="BBPLogo" HorizontalAlignment="Left" Height="480" VerticalAlignment="Top" Width="800" RenderTransformOrigin="1.163,0.596" Stretch="UniformToFill"/>
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Margin="78,18,436,164" Height="178">
            <Button x:Name="ClickMe" Content="Click Me!"  Margin="10" HorizontalAlignment="Center" Click="ClickMe_Click"/>
            <Button x:Name="ExitButton" Content="Exit" HorizontalAlignment="Left" VerticalAlignment="Bottom" Width="126"/>
        </StackPanel>
    </Grid>
</Page>

1 个答案:

答案 0 :(得分:2)

我已经在我的Raspberry Pi上测试了以下内容,所以从理论上讲它是可行的。

(1)在USB驱动器上查找图像文件

首先,您需要添加&#34;可移动存储&#34;您的应用程序的功能:打开Package.appxmanifest,导航到功能选项卡,并确保&#34;可移动存储&#34;检查。这将允许您的应用访问USB驱动器上的文件。其次,Universal应用程序只能枚举/读取/修改已在清单中明确声明的文件类型&#34;文件类型关联&#34;。再次打开Package.appxmanifest,导航到声明选项卡,选择&#34;文件类型关联&#34;,然后点击添加。您现在需要根据您的应用程序要支持的文件类型填写右侧窗格中的字段:可以找到详细信息on MSDN

然后,您可以枚举these examples中的可移动驱动器及其子文件/文件夹。例如,要枚举顶级文件(C#,抱歉):

var drives = await Windows.Storage.KnownFolders.RemovableDevices.GetItemsAsync();

foreach (var drive in drives)
{
    var files = await drive.GetFilesAsync();
}

另请注意,只会显示子文件夹和显式关联的文件类型。

(2)从文件中加载图片

It is not possible to load a file directly from a file:// URI。相反,您需要通过StorageFile和流,例如:

var file = await StorageFile.GetFileFromPathAsync(@"E:\test.png");

using (var stream = await file.OpenAsync(FileAccessMode.Read))
{
    var bmp = new BitmapImage();
    await bmp.SetSourceAsync(stream);
    ImageControl.Source = bmp;
}

(3)退出申请

App.Current.Exit();似乎对我有用,退出应用程序并奇怪地显示&#34;请等待我们设置您的设备&#34;进展微调,显然仍然潜伏在后面。