using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using GameStateManagement; namespace Axios.Engine.Extensions { public static class Bitmap_extension { #if WINDOWS // System.Drawing is NOT avaiable on WP7 or Xbox /* * http://stackoverflow.com/a/7394185/195722 * * * */ public static Texture2D GetTexture(this System.Drawing.Bitmap bitmap, GameScreen gameScreen) { BlendState oldstate = gameScreen.ScreenManager.GraphicsDevice.BlendState; gameScreen.ScreenManager.GraphicsDevice.BlendState = BlendState.AlphaBlend; Texture2D tex = new Texture2D(gameScreen.ScreenManager.GraphicsDevice, bitmap.Width, bitmap.Height, true, SurfaceFormat.Color); System.Drawing.Imaging.BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, bitmap.PixelFormat); int bufferSize = data.Height * data.Stride; //create data buffer byte[] bytes = new byte[bufferSize]; // copy bitmap data into buffer System.Runtime.InteropServices.Marshal.Copy(data.Scan0, bytes, 0, bytes.Length); // copy our buffer to the texture tex.SetData(bytes); // unlock the bitmap data bitmap.UnlockBits(data); gameScreen.ScreenManager.GraphicsDevice.BlendState = oldstate; return tex; } #endif } }