public SkinElementControl(SkinController skinController, SkinElement skinElement) { SkinController = skinController; SkinElement = skinElement; Focusable = true; Canvas.SetLeft(this, skinElement.X); Canvas.SetTop(this, skinElement.Y); Template = (ControlTemplate) Application.Current.TryFindResource("ThumbTemplate"); PreviewMouseDown += OnPreviewMouseDown; PreviewMouseUp += OnPreviewMouseUp; PreviewKeyDown += OnPreviewKeyDown; PreviewKeyUp += OnPreviewKeyUp; DragDelta += OnDragDelta; MouseEnter += OnMouseEnter; MouseLeave += OnMouseLeave; DrawNormal(); }
public void SaveImageMap(SkinElement element) { SkinArtImage artBgMap = null; if (element.ColorPositions.Count == 0) return; switch (element.GetType().Name) { case "SkinWindow": artBgMap = ((SkinWindow) element).Art.Images.FirstOrDefault(t => t.Type == "MapImage"); break; } if (artBgMap == null) return; var imageMap = (BitmapImage) Core.GetImageSourceFromFileName(GetFullPath(artBgMap.Path)); var bmp = Core.BitmapImage2Bitmap(imageMap); bmp = new Bitmap(bmp.Width, bmp.Height); using (var g = Graphics.FromImage(bmp)) { g.Clear(Color.FromArgb(255, 1, 1, 1)); foreach (var pos in element.ColorPositions) { g.FillRectangle( new SolidBrush(pos.MapColor), (int) pos.X, (int) pos.Y, (int) pos.Width, (int) pos.Height ); } } bmp.Save(GetFullPath(artBgMap.Path), ImageFormat.Png); }
private void RebuildImageMap(SkinArtImage artBgMap, SkinElement element) { element.ColorPositions.Clear(); var imageMap = (BitmapImage) Core.GetImageSourceFromFileName(GetFullPath(artBgMap.Path)); var bmp = Core.BitmapImage2Bitmap(imageMap); var transparentColor = bmp.GetPixel(0, 0); AppProgressBarController.SetValue(0, bmp.Height, "Analyzing image map..."); AppProgressBarController.Show(); var i = 0; for (var y = 0; y < imageMap.PixelHeight; y++) { i++; if (i%10 == 0) { AppProgressBarController.SetValue(i, bmp.Height, "Analyzing image map..."); AppProgressBarController.DoEvents(); } for (var x = 0; x < imageMap.PixelWidth; x++) { // Получаем цвет фона карты var pixel = bmp.GetPixel(x, y); if (x == 0 && y == 0) { transparentColor = Color.FromArgb(pixel.A, pixel.R, pixel.G, pixel.B); continue; } var currentPixelColor = Color.FromArgb(pixel.A, pixel.R, pixel.G, pixel.B); if (currentPixelColor != transparentColor) { if (element.ColorPositions.Any(t => t.MapColor == currentPixelColor)) { var pos = element.ColorPositions.First(t => t.MapColor == currentPixelColor); pos.Width = x > pos.X + pos.Width - 1 ? x - pos.X + 1 : pos.Width; pos.Height = y > pos.Y + pos.Height - 1 ? y - pos.Y + 1 : pos.Height; } else { element.ColorPositions.Add(new ColorPosition { MapColor = currentPixelColor, X = x, Y = y }); } } } } AppProgressBarController.Hide(); }
public void DrawElement(SkinElement element) { switch (element.GetType().Name) { case "SkinWindow": RedrawWindow((SkinWindow) element); break; case "SkinButton": RedrawButton((SkinButton) element); break; case "SkinComboBox": RedrawComboBox((SkinComboBox) element); break; case "SkinSlider": RedrawSlider((SkinSlider) element); break; } }