Frage

Ich habe mit Windows 8 und Metro UI experimentiert. Ich habe eine absolut vernünftige Ladung eines Bitmap -Bildes geschrieben, aber es scheint nicht geladen zu sein, jede Hilfe wird geschätzt.

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

In diesem Beispiel nehmen Breite und Höhe immer Werte von Null. Es wird in derselben Klasse gerendert.

    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

Und hier wird es erstellt/genannt:

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

===

Es ist kein Problem mit meinem Canvas -Objekt, denn wenn ich es mit fülle Sprite.Fill = New SolidColorBrush(Colors.White) Dann funktioniert es gut und ich sehe ein weißes Quadrat auf meinem Bildschirm, die fragliche Bitmap ist auf "Immer kopieren" gesetzt und befindet sich im Zielordner, wenn ich ihn anzeige.

Ich bin mir nicht ganz sicher, was ich falsch mache.

War es hilfreich?

Lösung

Nun, ich habe es geschafft, das selbst herauszufinden.

Sie können einen Basis -Uri bekommen, indem Sie mich verwenden. oder in C# this.uri.

Hier ist der fertige Code, mit dem jeder ein Bitmap -Bild in eine Leinwand laden kann. und sogar drehen.

Ich habe das selbst geschrieben, also kann jeder, der es entdeckt, dasselbe Problem mit dem gleichen Problem zu haben, es gerne so benutzt, wie er will.

Das Bild muss das Format "filepath/bild.extesion" annehmen

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top