Here is a class that I finally came up with. I would like to point everyone first to Shaggy Hiker's codebank suggestion here. He was the one who explained how to actually draw on the control.
As for the class:
For the initialize, bitmaptotexture2d, load_content, and draw please refer to my xna tutorials in the Utility Bank.Code:Option Strict On Option Explicit On Imports Microsoft.Xna.Framework Imports Microsoft.Xna.Framework.Graphics Imports System.IO Public Class Xna_Sprite Inherits Windows.Forms.Control Private grafix As Graphics.GraphicsDevice Private s_Batch As SpriteBatch Private img As Bitmap Public Property Image() As Bitmap Get Return img End Get Set(ByVal value As Bitmap) img = value Call Reset() End Set End Property Private transColor As Color = Color.CornflowerBlue Public Property TransparentColor() As Color Get Return transColor End Get Set(ByVal value As Color) transColor = value End Set End Property Private textur As Texture2D Private Function initialize(ByRef surface As Xna_Sprite) As Boolean Try Dim pparam As New PresentationParameters pparam.DeviceWindowHandle = surface.Handle pparam.IsFullScreen = False Dim grafixAdapt As GraphicsAdapter = GraphicsAdapter.DefaultAdapter grafix = New GraphicsDevice(grafixAdapt, GraphicsProfile.HiDef, pparam) initialize = True Catch ex As Exception initialize = False End Try End Function Private Function BitmapToTexture2D(GraphicsDevice As GraphicsDevice, image As System.Drawing.Bitmap) As Texture2D Dim bufferSize As Integer = image.Height * image.Width * 4 Dim memoryStream As New System.IO.MemoryStream(bufferSize) image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png) memoryStream.Seek(0, SeekOrigin.Begin) Dim texture As Texture2D = Texture2D.FromStream(GraphicsDevice, memoryStream, image.Width, image.Height, False) memoryStream.Close() Return texture End Function Private Sub Load_Content() If IsNothing(grafix) = False Then s_Batch = New SpriteBatch(grafix) textur = BitmapToTexture2D(grafix, img) Else Throw New ArgumentNullException("Grafix") Exit Sub End If End Sub Private Sub Draw() grafix.Clear(transColor) With s_Batch .Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend) .Draw(textur, New Rectangle(0, 0, img.Width, img.Height), transColor) .End() End With grafix.Present() End Sub Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs) If IsNothing(img) Then Dim g As Drawing.Graphics = e.Graphics g.DrawIcon(System.Drawing.SystemIcons.Error, Me.DisplayRectangle) Else Call Reset() End If 'MyBase.OnPaint(e) End Sub Public Sub Reset() If initialize(Me) Then Call Load_Content() Call Draw() End If End Sub End Class




Reply With Quote