コード例 #1
0
        private void ClusteringMethod(object parameter)
        {
            data.Image = data.OriginalImage;

            List <EachPixel> pixels = new List <EachPixel>(); //Коллекция пикселей

            string PatternMatches = @"\d+";                   // Создаем шаблон для координат точек

            Regex rg = new Regex(PatternMatches);

            foreach (var line in File.ReadLines(PixelsPath.FileName)) //
            {
                MatchCollection matchedline = rg.Matches(line);       // Получаем все совпадения слов и символов
                pixels.Add(new EachPixel());
                pixels[pixels.Count - 1].x = Convert.ToInt32(matchedline[0].Value);
                pixels[pixels.Count - 1].y = Convert.ToInt32(matchedline[1].Value);
            }


            Collection <EachCluster> clusters = data.clustering(pixels, data.MaxDistance); //Кластеризация точек

            Bitmap newImage = converter.BitmapImage2Bitmap(data.Image);                    //Конвертация Изображения в Bitmap для работы

            Random rnd = new Random();


            foreach (EachCluster cluster in clusters)                                            //Обработка каждого кластера
            {
                Color randomColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); //рандомный цвет каждого кластера

                for (int i = 0; i < cluster.neighbours.Count; i++)                               //Каждый пиксель в кластере покрасить в один цвет
                {
                    newImage.SetPixel(cluster.neighbours[i].x, cluster.neighbours[i].y, randomColor);
                }

                Model.Icon model = new Model.Icon();

                using (Graphics grf = Graphics.FromImage(newImage)) //Рисование Иконки для кластера
                {
                    //Смещение иконки на 16 (Размер Иконки 32) для оцентровки
                    grf.DrawIcon(model.CustomIcon(Convert.ToString(cluster.neighbours.Count)), cluster.x - 16, cluster.y - 16);
                }

                data.Image = converter.Bitmap2BitmapImage(newImage);

                OnPropertyChange();
            }
        }
コード例 #2
0
ファイル: ImageResize.cs プロジェクト: ywscr/Notification
        /// <summary>
        /// Scales an image to given dimensions, preserving aspect ratio
        /// </summary>
        /// <param name="icon">Subject icon</param>
        /// <param name="width">Desired width</param>
        /// <param name="height">Desired height</param>
        /// <returns>System.Drawing.Image</returns>
        public static Image ScaleImage(Model.Icon icon, int width, int height)
        {
            var adjustX = (double)width / icon.Image.Width;
            var adjustY = (double)height / icon.Image.Height;

            var ratio = Math.Min(adjustX, adjustY);

            var newWidth  = (int)(icon.Image.Width * ratio) - icon.Padding;
            var newHeight = (int)(icon.Image.Height * ratio) - icon.Padding;

            var newImage = new Bitmap(newWidth, newHeight);

            using (var graphics = Graphics.FromImage(newImage))
                graphics.DrawImage(icon.Image, 0, 0, newWidth, newHeight);

            return(newImage);
        }