2015-10-14 72 views
3

我已經成功創建了我的第一個iot項目,並且可以獲取圖像以加載按下我的Raspberry Pi2上的按鈕。如何在Pi上顯示來自USB的隨機圖像

我試圖把一些代碼從一組圖像中組合出來,但是我有一些區域會掉下來。

1)我不知道如何從郫縣

2)我似乎無法從文件加載圖像,只能從嵌入的資源來掃描USB棒。

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> 
+2

如果你打算投票,至少有禮貌地說出爲什麼我可以修復它。它通過評論代碼的方式顯示了兩方面的研究成果,而且我非常清楚我正在嘗試做什麼。 –

回答

2

我已經在我的Raspberry Pi上測試了以下內容,理論上它都是可行的。

(1)USB驅動器上查找圖像文件

首先,你需要將「可移動存儲」功能添加到您的應用程序:打開Package.appxmanifest,轉到功能選項卡,並確保「可移動存儲」被選中。這將允許您的應用程序訪問USB驅動器上的文件。其次,通用應用程序只能枚舉/讀取/修改在「文件類型關聯」下清單中明確聲明的文件類型。再次打開Package.appxmanifest,導航到聲明選項卡,選擇「文件類型關聯」,然後點擊添加。您現在需要根據您的應用需要支持的文件類型在右側窗格中填寫字段:可以找到詳細信息on MSDN

然後,您可以枚舉可移動驅動器及其子文件/文件夾,如these examples。例如,枚舉頂層文件(C#,不好意思):

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

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

還要記住,只有子文件夾和明確關聯的文件類型就會顯示出來。從文件

It is not possible to load a file directly from a file:// URI

(2)加載圖像。相反,你需要通過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();似乎爲我工作,退出應用程序和古怪顯示「請等待,我們設置你的設備「顯然仍然隱藏在進度微調器後面。

+0

真棒,我仍然無法使它工作,但你的意見和鏈接給了我方向,我很確定我應該能夠從這裏開始工作:)。 –

+0

哪一部分給出了問題? – peterdn

+0

第1部分和第2部分,但那是因爲我是vba編碼器,所以讓我的頭繞過vb.net是一個挑戰。第3部分工作完美雖然:)難度進一步複雜的pi,因爲我不能像以前的vb.net項目中使用的圖片框和類似的東西 –