public static ActorTemplate RenderActor(ActorInfo info, TileSet tileset, Palette p) { var image = RenderSimple.GetImage(info, tileset.Id); using (var s = FileSystem.OpenWithExts(image, tileset.Extensions)) { var shp = new ShpReader(s); var bitmap = RenderShp(shp, p); try { using (var s2 = FileSystem.OpenWithExts(image + "2", tileset.Extensions)) { var shp2 = new ShpReader(s2); var roofBitmap = RenderShp(shp2, p); using (var g = System.Drawing.Graphics.FromImage(bitmap)) g.DrawImage(roofBitmap, 0, 0); } } catch { } return new ActorTemplate { Bitmap = bitmap, Info = info, Appearance = info.Traits.GetOrDefault<EditorAppearanceInfo>() }; } }
public static ResourceTemplate RenderResourceType(ResourceTypeInfo info, string[] exts, Palette p) { var image = info.SpriteNames[0]; using (var s = FileSystem.OpenWithExts(image, exts)) { var shp = new ShpReader(s); var frame = shp[shp.ImageCount - 1]; var bitmap = new Bitmap(shp.Width, shp.Height, PixelFormat.Format8bppIndexed); bitmap.Palette = MakeSystemPalette(p); var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed); unsafe { byte* q = (byte*)data.Scan0.ToPointer(); var stride = data.Stride; for (var i = 0; i < shp.Width; i++) for (var j = 0; j < shp.Height; j++) q[j * stride + i] = frame.Image[i + shp.Width * j]; } bitmap.UnlockBits(data); return new ResourceTemplate { Bitmap = bitmap, Info = info, Value = shp.ImageCount - 1 }; } }
public static ActorTemplate RenderActor(ActorInfo info, TileSet tileset, Palette p) { var ri = info.Traits.Get<RenderSimpleInfo>(); string image = null; if (ri.OverrideTheater != null) for (int i = 0; i < ri.OverrideTheater.Length; i++) if (ri.OverrideTheater[i] == tileset.Id) image = ri.OverrideImage[i]; image = image ?? ri.Image ?? info.Name; using (var s = FileSystem.OpenWithExts(image, tileset.Extensions)) { var shp = new ShpReader(s); var bitmap = RenderShp(shp, p); try { using (var s2 = FileSystem.OpenWithExts(image + "2", tileset.Extensions)) { var shp2 = new ShpReader(s2); var roofBitmap = RenderShp(shp2, p); using (var g = System.Drawing.Graphics.FromImage(bitmap)) g.DrawImage(roofBitmap, 0, 0); } } catch { } return new ActorTemplate { Bitmap = bitmap, Info = info, Centered = !info.Traits.Contains<BuildingInfo>() }; } }
static ActorTemplate RenderActor(ActorInfo info, TileSet tileset, Palette p) { var ri = info.Traits.Get<RenderSimpleInfo>(); string image = null; if (ri.OverrideTheater != null) for (int i = 0; i < ri.OverrideTheater.Length; i++) if (ri.OverrideTheater[i] == tileset.Id) image = ri.OverrideImage[i]; image = image ?? ri.Image ?? info.Name; using (var s = FileSystem.OpenWithExts(image, tileset.Extensions)) { var shp = new ShpReader(s); var frame = shp[0]; var bitmap = new Bitmap(shp.Width, shp.Height); var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); unsafe { int* q = (int*)data.Scan0.ToPointer(); var stride = data.Stride >> 2; for (var i = 0; i < shp.Width; i++) for (var j = 0; j < shp.Height; j++) q[j * stride + i] = p.GetColor(frame.Image[i + shp.Width * j]).ToArgb(); } bitmap.UnlockBits(data); return new ActorTemplate { Bitmap = bitmap, Info = info, Centered = !info.Traits.Contains<BuildingInfo>() }; } }
public static ResourceTemplate RenderResourceType(ResourceTypeInfo info, string[] exts, IPalette p) { var image = info.EditorSprite; using (var s = GlobalFileSystem.OpenWithExts(image, exts)) { // TODO: Do this properly var shp = new ShpReader(s) as ISpriteSource; var frame = shp.Frames.Last(); var bitmap = new Bitmap(frame.Size.Width, frame.Size.Height, PixelFormat.Format8bppIndexed); bitmap.Palette = p.AsSystemPalette(); var data = bitmap.LockBits(bitmap.Bounds(), ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed); unsafe { var q = (byte*)data.Scan0.ToPointer(); var stride = data.Stride; for (var i = 0; i < frame.Size.Width; i++) for (var j = 0; j < frame.Size.Height; j++) q[j * stride + i] = frame.Data[i + frame.Size.Width * j]; } bitmap.UnlockBits(data); return new ResourceTemplate { Bitmap = bitmap, Info = info, Value = shp.Frames.Count - 1 }; } }
public ImageHeader(Stream stream, ShpReader reader) { this.reader = reader; var data = stream.ReadUInt32(); FileOffset = data & 0xffffff; Format = (Format)(data >> 24); RefOffset = stream.ReadUInt16(); RefFormat = (Format)stream.ReadUInt16(); }
Sprite[] LoadCursors(string filename) { try { var shp = new Dune2ShpReader(FileSystem.OpenWithExts(filename, exts)); return shp.Select(a => modData.SheetBuilder.Add(a.Image, a.Size)).ToArray(); } catch (IndexOutOfRangeException) // This will occur when loading a custom (RA-format) .shp { var shp = new ShpReader(FileSystem.OpenWithExts(filename, exts)); return shp.Select(a => modData.SheetBuilder.Add(a.Image, shp.Size)).ToArray(); } }
public static void LoadAndResolve( string shp ) { try { if (Shps.ContainsKey(shp)) return; var reader = new ShpReader(FileSystem.OpenWithExts(shp, ".tem", ".sno", ".int", ".shp")); Shps[shp] = reader.Select(ih => { var bmp = new Bitmap(reader.Width, reader.Height); for (var j = 0; j < bmp.Height; j++) for (var i = 0; i < bmp.Width; i++) bmp.SetPixel(i, j, Pal.GetColor(ih.Image[j * bmp.Width + i])); return bmp; }).ToArray(); } catch { } }
Sprite[] LoadSprites(string filename) { // TODO: Cleanly abstract file type detection if (filename.ToLower().EndsWith("r8")) { var r8 = new R8Reader(FileSystem.Open(filename)); return r8.Select(a => SheetBuilder.Add(a.Image, a.Size, a.Offset)).ToArray(); } BinaryReader reader = new BinaryReader(FileSystem.OpenWithExts(filename, exts)); var ImageCount = reader.ReadUInt16(); if (ImageCount == 0) { var shp = new ShpTSReader(FileSystem.OpenWithExts(filename, exts)); return shp.Select(a => SheetBuilder.Add(a.Image, shp.Size)).ToArray(); } else { var shp = new ShpReader(FileSystem.OpenWithExts(filename, exts)); return shp.Frames.Select(a => SheetBuilder.Add(a.Image, shp.Size)).ToArray(); } }
static Bitmap RenderShp(ShpReader shp, Palette p) { var frame = shp[0]; var bitmap = new Bitmap(shp.Width, shp.Height, PixelFormat.Format8bppIndexed); bitmap.Palette = p.AsSystemPalette(); var data = bitmap.LockBits(bitmap.Bounds(), ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed); unsafe { byte* q = (byte*)data.Scan0.ToPointer(); var stride2 = data.Stride; for (var i = 0; i < shp.Width; i++) for (var j = 0; j < shp.Height; j++) q[j * stride2 + i] = frame.Image[i + shp.Width * j]; } bitmap.UnlockBits(data); return bitmap; }
static Sprite[] LoadSprites(string filename) { var shp = new ShpReader(FileSystem.OpenWithExts(filename, exts)); return shp.Select(a => Game.modData.SheetBuilder.Add(a.Image, shp.Size)).ToArray(); }
public void OpenSHP(string filename) { tmPlay.Enabled = false; tbPlay.Enabled = false; cbLoop.Enabled = false; cbLoop.Checked = false; bPNG = false; tbPlay.Value = 1; tbPlay.Maximum = 1; fnum = 1; FileStream F = new FileStream(filename, FileMode.Open, FileAccess.Read); FileStream S = new FileStream(filename, FileMode.Open, FileAccess.Read); BinaryReader rdr = new BinaryReader(S); int ImageCount = rdr.ReadUInt16(); rdr.Close(); S.Close(); if (ImageCount == 0) { shp = new ShpTSReader(F); oldshp = false; } else { shpold = new ShpReader(F); oldshp = true; } Text = sname + sver + " - " + filename; ApplyNewPalette(lastpal); tbPlay.Enabled = true; cbLoop.Enabled = true; }
static Bitmap RenderShp(ShpReader shp, Palette p) { var frame = shp[0]; var bitmap = new Bitmap(shp.Width, shp.Height); var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); unsafe { int* q = (int*)data.Scan0.ToPointer(); var stride2 = data.Stride >> 2; for (var i = 0; i < shp.Width; i++) for (var j = 0; j < shp.Height; j++) q[j * stride2 + i] = p.GetColor(frame.Image[i + shp.Width * j]).ToArgb(); } bitmap.UnlockBits(data); return bitmap; }