예제 #1
0
        private System.Drawing.Bitmap ToSystemImage(Processing.Image image, Blending2D blending = null)
        {
            if (image == null)
            {
                return(null);
            }
            System.Drawing.Bitmap converted = new Bitmap(image.Width, image.Height);

            if (blending == null)
            {
                blending = stdBlending;
            }

            int W_1 = converted.Width - 1;

            for (int y = converted.Height - 1; y >= 0; --y)
            {
                for (int x = W_1; x >= 0; --x)
                {
                    float alpha = blending(x, y);

                    int rc = (int)((float)image[x, y, 0] * alpha);
                    int gc = (int)((float)image[x, y, 1] * alpha);
                    int bc = (int)((float)image[x, y, 2] * alpha);
                    int a  = (int)((float)255 * alpha);

                    converted.SetPixel(x, y, Color.FromArgb(a, rc, gc, bc));
                }
            }

            return(converted);
        }
예제 #2
0
        private void BigUpdate()
        {
            if (Bitmap == null)
            {
                Resizer.Original = null;
                UpdateViewedImage();
                return;
            }

            Resizer          = new Processing.Resizer();
            Resizer.Original = ToProcessableImage(Bitmap);

            t.OriginalWidth   = Resizer.Original.Width;
            t.OriginalHeight  = Resizer.Original.Height;
            t.RelativeScaling = true;
            t.ScalingX        = scalingFactor;
            t.ScalingY        = scalingFactor;

            t.RotationInDegrees = true;
            t.RotationRescaling = true;
            t.RotationAngle     = angle;

            Transformations.TransformationPrototype prototype = t.CalculateTransformation();

            int targetHeight = (int)(Math.Round((double)prototype.TargetHeight));
            int targetWidth  = (int)(Math.Round((double)prototype.TargetWidth));

            Resizer.Result = new Processing.Image(targetWidth, targetHeight, 3);

            Cast2D casting = Casting.Function.FromTransformationMatrix(prototype.T_Target2Original, 0.5f);

            Resizer.Interpolation = new Interpolations.Interp();
            Resizer.Interpolation.InitializeTransformation(Resizer.Original.Width, Resizer.Original.Height, Resizer.Result.Width, Resizer.Result.Height, casting);

            float passage = 0;

            System.Single.TryParse(tbTransition.Text, out passage);

            Resizer.Interpolation.InitializeFunctions(SelectedAlgorithm, SelectedPBCC);
            if (selectedTransition > 0)
            {
                Resizer.Interpolation.InitializePassageReduction(passage);
            }
            else
            {
                Resizer.Interpolation.TransitionReduction = null;
            }

            Blending = Casting.Function.FastBlendingFromCasting(casting, 0.5f, 0.5f, Resizer.Original.Width, Resizer.Original.Height);

            Resizer.Optimalize(true);
            Resizer.Resize();

            UpdateViewedImage();
        }