Exemple #1
0
        public void PostProcess()
        {
            for (var i = 0; i < Images.Count; i++)
                if (Images[i] != OriginImages[i])
                    Images[i].Dispose();

            Images = OriginImages;

            
            if(Reverse)
            {
                Images = Images.Select((originImg) =>
                {
                    var bitmap = new SKBitmap(originImg.Width, originImg.Height, SKColorType.Bgra8888, SKAlphaType.Premul);
                    using (var canvas = new SKCanvas(bitmap))
                    {
                        canvas.Clear();
                        canvas.Scale(-1, 1);
                        canvas.DrawBitmap(originImg, new SKRectI(0, 0, originImg.Width, originImg.Height), new SKRectI(-originImg.Width, 0, 0, originImg.Height));
                        canvas.Flush();
                        canvas.Dispose();
                    }
                    return bitmap;
                }).ToList();
            }

            if(ClipTransparent)
            {
                var clipList = new SKRectI[Images.Count];

                for (var i = 0; i < Images.Count; i++)
                {
                    var bitmap = Images[i];
                    var clip = new SKRectI();
                    if (ClipTransparent)
                    {
                        // Clip X
                        for (var x = 0; x < bitmap.Width; x++)
                        {
                            if (!ColumnTransparentScan(bitmap, x))
                            {
                                clip.Left = x;
                                break;
                            }
                        }
                        for (var x = bitmap.Width - 1; x >= 0; x--)
                        {
                            if (!ColumnTransparentScan(bitmap, x))
                            {
                                clip.Right = x + 1;
                                break;
                            }
                        }

                        // Clip Y
                        for (var y = 0; y < bitmap.Height; y++)
                        {
                            if (!RowTransparentScan(bitmap, y))
                            {
                                clip.Top = y;
                                break;
                            }
                        }
                        for (var y = bitmap.Height - 1; y >= 0; y--)
                        {
                            if (!RowTransparentScan(bitmap, y))
                            {
                                clip.Bottom = y + 1;
                                break;
                            }
                        }
                    }
                    clipList[i] = clip;
                }
                var minX = clipList.Select(rect => rect.Left).Min();
                var minY = clipList.Select(rect => rect.Top).Min();
                var images = new List<SKBitmap>();
                for (var i = 0; i < Images.Count; i++)
                {
                    var clip = clipList[i];
                    clip.Left = minX;
                    clip.Top = minY;
                    var bitmap = new SKBitmap(clip.Width, clip.Height, SKColorType.Bgra8888, SKAlphaType.Premul);
                    using (var canvas = new SKCanvas(bitmap))
                    {
                        canvas.Clear();
                        canvas.DrawBitmap(Images[i], clip, new SKRectI(0, 0, clip.Width, clip.Height));
                        canvas.Flush();
                        canvas.Dispose();
                    }
                    images.Add(bitmap);
                    if (Images != OriginImages)
                        Images[i].Dispose();
                }
                Images = images;
            }

            
        }