public static BitmapSource Brightness(BitmapSource source, Byte value) { AsmProxy proxy = new AsmProxy(); int size, stride; byte[] pixels = new BitmapWorker().GetByteArray(source, out size, out stride); unsafe { fixed(byte *array = pixels) { proxy.executeAsmBrightnessFilter(array, size, value); } } BitmapSource result = BitmapSource.Create(source.PixelWidth, source.PixelHeight, source.DpiX, source.DpiY, source.Format, source.Palette, pixels, stride); return(result); }
private void ReplaceAlphaChannelAction() { var openDialog = new OpenFileDialog { Filter = this.GetSupportedExtensionsOpenDialogFilter() }; var dialogResult = openDialog.ShowDialog(); if (dialogResult.HasValue && dialogResult.Value) { var fileInfo = new FileInfo(openDialog.FileName); if (fileInfo.Exists) { this.Bitmap = BitmapWorker.GetBitmapSourceWithReplacedAlphaChannel( this.Bitmap, FileWorker.OpenImage(fileInfo)); this.OnPropertyChanged(nameof(this.Viewport)); } } }
public void AffectImage(Dictionary <String, Object> args) { try { IEventAggregator aggregator; //ZoomingInfo zi; Image image = (Image)args["DisplayedImage"]; BitmapSource bitmapSource = image.OriginalBitmap; int clickPositionX = (int)((int)args["ClickPositionX"] * bitmapSource.DpiX / 96.0); int clickPositionY = (int)((int)args["ClickPositionY"] * bitmapSource.DpiY / 96.0); int imageWidth = bitmapSource.PixelWidth; int imageHeight = bitmapSource.PixelHeight; double zoomValue = (double)args["ZoomValue"]; if (zoomValue >= 1) { } else { zoomPositionXBeg = clickPositionX - (int)(0.5 * (zoomValue * imageWidth)); zoomPositionYBeg = clickPositionY - (int)(0.5 * (zoomValue * imageHeight)); zoomPositionXEnd = clickPositionX + (int)(0.5 * (zoomValue * imageWidth)); zoomPositionYEnd = clickPositionY + (int)(0.5 * (zoomValue * imageHeight)); AdjustZoomBordersIfNecessary(imageWidth, imageHeight); int width = zoomPositionXEnd - zoomPositionXBeg; int height = zoomPositionYEnd - zoomPositionYBeg; Bitmap bitmap; BitmapWorker bw = new BitmapWorker(); bitmap = GetBitmap(bitmapSource); bitmap = bw.GetBitmapFragment(bitmap, zoomPositionXBeg, zoomPositionYBeg, width, height, 0, 0, zoomValue); Bitmap finalBitmap = new Bitmap(bitmap, new System.Drawing.Size(imageWidth, imageHeight)); bitmapSource = bw.BitmapToSource(finalBitmap); image.Bitmap = bitmapSource; } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public void AffectImage(Dictionary <String, Object> args) { try { IEventAggregator aggregator = GlobalEvent.GetEventAggregator(); BitmapWorker bw = new BitmapWorker(); BitmapSource bitmapSource = (BitmapSource)args["BitmapSource"]; System.Windows.Point regionLocation = (System.Windows.Point)args["RegionLocation"]; int regionWidth = (int)((int)args["RegionWidth"] * bitmapSource.DpiX / 96.0); int regionHeight = (int)((int)args["RegionHeight"] * bitmapSource.DpiY / 96.0); if (regionWidth <= 0 || regionHeight <= 0) { return; } Thickness imagePosition = (Thickness)args["ImagePosition"]; int ID = (int)args["PresenterID"]; double scale = (double)args["Scale"]; int imagePosX = (int)(imagePosition.Left * bitmapSource.DpiX / 96.0); int imagePosY = (int)(imagePosition.Top * bitmapSource.DpiY / 96.0); int posX = (int)(regionLocation.X * bitmapSource.DpiX / 96.0); int posY = (int)(regionLocation.Y * bitmapSource.DpiY / 96.0); if (regionWidth <= 0 || regionHeight <= 0) { return; } Bitmap bitmap; bitmap = bw.GetBitmap(bitmapSource); bool isOutside = false; bool isTooSmall = false; bitmap = bw.GetBitmapFragment(bitmap, posX, posY, regionWidth, regionHeight, imagePosX, imagePosY, scale, out isOutside, out isTooSmall); if (isTooSmall) { MessageBox.Show("Witdth or height of a region is less than 1 pixel.", "Error", MessageBoxButton.OK, MessageBoxImage.Error); aggregator.GetEvent <ResetRegionsEvent>().Publish(); return; } bitmap.Save(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\ImageViewer\temp" + ID.ToString() + ".png", ImageFormat.Png); bitmapSource = bw.BitmapToSource(bitmap); int stride; int size; stride = (bitmapSource.PixelWidth * bitmapSource.Format.BitsPerPixel + 7) / 8; size = bitmapSource.PixelHeight * stride; byte[] pixels = new byte[size]; bitmapSource.CopyPixels(pixels, stride, 0); List <byte> alphas = new List <byte>(); List <byte> reds = new List <byte>(); List <byte> greens = new List <byte>(); List <byte> blues = new List <byte>(); for (int i = 0; i < pixels.Length; i += 4) { alphas.Add(pixels[i + 3]); reds.Add(pixels[i + 2]); greens.Add(pixels[i + 1]); blues.Add(pixels[i]); } double[] averages = new double[4]; averages[0] = 0; averages[1] = 0; averages[2] = 0; averages[3] = 0; for (int i = 0; i < alphas.Count; i++) { averages[0] += reds[i]; averages[1] += greens[i]; averages[2] += blues[i]; averages[3] += alphas[i]; } averages[0] /= reds.Count; averages[1] /= greens.Count; averages[2] /= blues.Count; averages[3] /= alphas.Count; byte[] mins = new byte[4]; mins[0] = reds.Min(); mins[1] = greens.Min(); mins[2] = blues.Min(); mins[3] = alphas.Min(); byte[] maxs = new byte[4]; maxs[0] = reds.Max(); maxs[1] = greens.Max(); maxs[2] = blues.Max(); maxs[3] = alphas.Max(); double[] variances = new double[4]; double[] deviations = new double[4]; GetVarianceAndDeviation(ref variances, ref deviations, averages, reds, greens, blues, alphas); Dictionary <string, Object> regionInformation = new Dictionary <string, Object>(); regionInformation.Add("Averages", averages); regionInformation.Add("Mins", mins); regionInformation.Add("Maxs", maxs); regionInformation.Add("Width", (int)(bitmap.Width)); regionInformation.Add("Height", (int)(bitmap.Height)); regionInformation.Add("Variances", variances); regionInformation.Add("Deviations", deviations); regionInformation.Add("PresenterID", ID); aggregator.GetEvent <SendRegionInformationEvent>().Publish(regionInformation); } catch (KeyNotFoundException) { } }