private static Texture LoadSpriteSheetAbsolute(string title, string file_name) { // Load and decompress Photoshop file structures var psdFile = new PsdFile(); psdFile.Load(file_name, Encoding.Default); if (psdFile.Layers.Count == 0) { psdFile.BaseLayer.CreateMissingChannels(); } var layer = psdFile.BaseLayer; using (Bitmap bmp = new Bitmap(psdFile.ColumnCount, psdFile.RowCount)) { using (Graphics gfx = Graphics.FromImage(bmp)) { gfx.Clear(Color.Transparent); var bmp_data = bmp.LockBits(layer.Rect, ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); int pixel_size = 4 * sizeof(byte); int idx = 0; for (int i = 0; i < bmp_data.Height; i++) { for (int j = 0; j < bmp_data.Width; j++) { Marshal.Copy(new byte[] { layer.Channels [2].ImageData [idx], layer.Channels [1].ImageData [idx], layer.Channels [0].ImageData [idx], layer.Channels.Count >= 4 ? layer.Channels [3].ImageData [idx] : (byte)0xFF, }, 0, new IntPtr((long)bmp_data.Scan0 + i * bmp_data.Stride + j * pixel_size), pixel_size); idx++; } } bmp.UnlockBits(bmp_data); } var texture = Texture.LoadTexture(title, bmp); psdFile.SlicesToTextureRegionInfo(ref texture); return(texture); } }