Pregunta

He estado experimentando con Windows 8 y Metro UI, he escrito una carga perfectamente razonable de una imagen de mapa de bits, pero no parece estar cargando, se agradece cualquier ayuda.

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

En este ejemplo, el ancho y la altura siempre toman valores de cero. Se representa en la misma clase.

    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

Y aquí es donde se crea/llamado:

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

===

No es un problema con mi objeto de lienzo, porque si lo lleno con Sprite.Fill = New SolidColorBrush(Colors.White) Luego funciona bien, y veo un cuadrado blanco en mi pantalla, el mapa de bits en cuestión está configurado para "copiar siempre", y está en la carpeta de destino cuando la veo.

No estoy muy seguro de lo que estoy haciendo mal.

¿Fue útil?

Solución

Bueno, logré resolver esto yo mismo.

Puedes obtener un uri base usando Me.uri; o en c# this.uri.

Aquí está el código terminado que permitirá a cualquiera cargar una imagen de mapa de bits en un lienzo; e incluso rotarlo.

Escribí esto yo mismo, por lo que cualquiera que lo descubra tener el mismo problema puede sentirse libre de usarlo como quieran.

La imagen debe tomar el formato "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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top