public Image <Rgba32> GetBitmap() { if (PcsObjects.Count == 1) { return(SupDecoder.DecodeImage(PcsObjects[0], BitmapObjects[0], PaletteInfos)); } var r = Rectangle.Empty; for (var ioIndex = 0; ioIndex < PcsObjects.Count; ioIndex++) { var ioRect = new Rectangle(PcsObjects[ioIndex].Origin, BitmapObjects[ioIndex][0].Size); r = r.IsEmpty ? ioRect : Rectangle.Union(r, ioRect); } var mergedBmp = new Image <Rgba32>(r.Width, r.Height); for (var ioIndex = 0; ioIndex < PcsObjects.Count; ioIndex++) { var offset = PcsObjects[ioIndex].Origin - new Size(r.Location); using (var singleBmp = SupDecoder.DecodeImage(PcsObjects[ioIndex], BitmapObjects[ioIndex], PaletteInfos)) { mergedBmp.Mutate(b => b.DrawImage(singleBmp, offset, 0)); } } return(mergedBmp); }
public static Image <Rgba32> GetRgba32(this PcsData pcsData) { if (pcsData.PcsObjects.Count == 1) { return(SupDecoder.DecodeImage(pcsData.PcsObjects[0], pcsData.BitmapObjects[0], pcsData.PaletteInfos)); } var r = System.Drawing.Rectangle.Empty; for (var ioIndex = 0; ioIndex < pcsData.PcsObjects.Count; ioIndex++) { var ioRect = new System.Drawing.Rectangle(pcsData.PcsObjects[ioIndex].Origin, pcsData.BitmapObjects[ioIndex][0].Size); r = r.IsEmpty ? ioRect : System.Drawing.Rectangle.Union(r, ioRect); } var mergedBmp = new Image <Rgba32>(r.Width, r.Height); for (var ioIndex = 0; ioIndex < pcsData.PcsObjects.Count; ioIndex++) { var offset = pcsData.PcsObjects[ioIndex].Origin - new System.Drawing.Size(r.Location); using (var singleBmp = SupDecoder.DecodeImage(pcsData.PcsObjects[ioIndex], pcsData.BitmapObjects[ioIndex], pcsData.PaletteInfos)) { mergedBmp.Mutate(b => b.DrawImage(singleBmp, new SixLabors.ImageSharp.Point(offset.X, offset.Y), 0)); } } return(mergedBmp); }