So laden Sie ein Bitmapimage in Metroui dynamisch
-
27-10-2019 - |
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.
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