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); }
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(); }