Как загрузить BitmapImage в MetroUI динамически - PullRequest
1 голос
/ 19 октября 2011

Я экспериментировал с Windows 8 и Metro UI, я написал вполне разумную загрузку растрового изображения, но он не загружается, любая помощь приветствуется.

Public Sub New(Image As String)

Debug.Print("ms-resource://MyAssembly/" & Image)


Img = New ImageBrush()
Dim Bitmap As New BitmapImage()
Bitmap.UriSource = New Uri("ms-resource://MyAssembly/" & Image, UriKind.Absolute)

Img.ImageSource = Bitmap
Width = Bitmap.PixelWidth
Height = Bitmap.PixelHeight

Debug.Print("Height: " & Height & " Width: " & Width)

End Sub

В этом примере ширина и высота всегда принимают значения ноль.Он отображается в том же классе ..

    Public Sub Render(X As Integer, Y As Integer, Canv As Canvas)

        Dim Sprite As New Shapes.Rectangle
        Sprite.Width = CDbl(Width)
        Sprite.Height = CDbl(Height)
        Sprite.Fill = Img
        Sprite.SetValue(Canvas.TopProperty, CDbl(Y))
        Sprite.SetValue(Canvas.LeftProperty, CDbl(X))
        Canv.Children.Add(Sprite)

    End Sub

End Class

А вот где он создается / называется:

V = New Sprite("Images/Test.bmp")
gameRoot.Children.Clear()
V.Render(100, 100, gameRoot)

===

это не такпроблема с моим объектом Canvas, потому что, если я заполняю его Sprite.Fill = New SolidColorBrush(Colors.White), он работает нормально, и я вижу белый квадрат на моем экране, растровое изображение, о котором идет речь, устанавливается на «Копировать всегда» и находится в папке назначенияЯ вижу это.

Я не совсем уверен, что я делаю неправильно.

1 Ответ

0 голосов
/ 22 октября 2011

Ну, мне удалось выяснить это сам.

Вы можете получить базовый URI, используя Me.Uri; или в C # This.Uri.

Вот готовый код, который позволит любому загружать растровое изображение на холст; и даже поверните его.

Я написал это сам, поэтому любой, кто обнаружит его с такой же проблемой, может свободно использовать его по своему усмотрению.

Изображение должно иметь формат «FilePath / Image.extension»

Public Class Sprite

    'Public Shared Baseuri As Uri

    Public Img As ImageBrush
    Public Bitmap As BitmapImage

    Public Sub New(Image As String, Base As Uri)

        'Debug.Print("BASE:" & Base.ToString)
        'Debug.Print("USING:" & Image)
        'Debug.Print("RESULT:" & New Uri(Base, Image).ToString)

        Img = New ImageBrush()
        Bitmap = New BitmapImage(New Uri(Base, Image))

    End Sub

    Public Overloads Sub Render(X As Integer, Y As Integer, Width As Integer, Height As Integer, Canv As Canvas)

        Img.ImageSource = Bitmap
        Dim Sprite As New Shapes.Rectangle
        Sprite.Width = CDbl(Width)
        Sprite.Height = CDbl(Height)
        Sprite.Fill = Img
        Sprite.SetValue(Canvas.TopProperty, CDbl(Y))
        Sprite.SetValue(Canvas.LeftProperty, CDbl(X))
        Canv.Children.Add(Sprite)

    End Sub

    Public Overloads Sub Render(X As Integer, Y As Integer, Width As Integer, Height As Integer, Canv As Canvas, Angle As Integer)

        Img.ImageSource = Bitmap
        Dim Sprite As New Shapes.Rectangle
        Sprite.Width = CDbl(Width)
        Sprite.Height = CDbl(Height)
        Sprite.Fill = Img
        Sprite.SetValue(Canvas.TopProperty, CDbl(Y))
        Sprite.SetValue(Canvas.LeftProperty, CDbl(X))

        Dim v As New Windows.UI.Xaml.Media.RotateTransform
        v.Angle = CDbl(Angle)
        v.CenterX = Width / 2
        v.CenterY = Height / 2
        Sprite.RenderTransform = v


        Canv.Children.Add(Sprite)

    End Sub

End Class
...