コード例 #1
0
ファイル: BluRaySupParser.cs プロジェクト: Markomas/PgsToSrt
            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);
            }
コード例 #2
0
        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);
        }