2016-07-08 4 views
2

Фон: в настоящее время я занят показом позиции транспортного средства на масштабируемом холсте на основе позиции (X, Y) и ориентации (для вращения). Я использую Rectangle для визуализации транспортного средства. Все работает хорошо, но я немного жаден, и теперь я хочу заменить Rectangle на Top View Picture of the Vehicle, так что выглядит, что само транспортное средство движется вместо Rectangle.Использование изображения вместо прямоугольника в C#

код ниже:

private void PaintLocationVehicle(VehicleClass vc) 
{ 

    IEnumerable<Rectangle> collection = vc.ZoomableCanvas.Children.OfType<Rectangle>().Where(x => x.Name == _vehicleobjectname); 
    List<Rectangle> listE = collection.ToList<Rectangle>(); 
    for (int e = 0; e < listE.Count; e++) 
     vc.ZoomableCanvas.Children.Remove(listE[e]); 

    // Assign X and Y Position from Vehicle 
    double drawingX = vc.gCurrentX * GlobalVar.DrawingQ; 
    double drawingY = vc.gCurrentY * GlobalVar.DrawingQ; 
    // Scale Length and Width of Vehicle 
    double tractorWidthScaled = vc.tractorWidth * GlobalVar.DrawingQ; 
    double tractorLengthScaled = vc.tractorLength * GlobalVar.DrawingQ; 
    // Get Drawing Location 
    double _locationX = drawingX - (tractorLengthScaled/2); 
    double _locationY = drawingY - ((tractorWidthScaled/2)); 
    RotateTransform rotation = new RotateTransform(); 
    // Angle in 10th of a Degree 
    rotation.Angle = vc.gCurrentTheeta/10 ; 
    double i = 0; 
    //paint the node 
    Rectangle _rectangle = new Rectangle(); 
    _rectangle.Stroke = new SolidColorBrush((Color)ColorConverter.ConvertFromString(vc.VehicleColor == "" ? "Black" : vc.VehicleColor)); 
     _rectangle.Fill = new SolidColorBrush((Color)ColorConverter.ConvertFromString(vc.VehicleColor == "" ? "Black" : vc.VehicleColor)); 
     i += 0; 
    _rectangle.Width = tractorLengthScaled ; 
    _rectangle.Height = tractorWidthScaled; 
    rotation.CenterX = _rectangle.Width/2; 
    rotation.CenterY = _rectangle.Height/2; 
    _rectangle.RenderTransform = rotation; 
    Canvas.SetTop(_rectangle, _locationY + i); 
    Canvas.SetLeft(_rectangle, _locationX + i); 
    _rectangle.SetValue(ZoomableCanvas.ZIndexProperty, 2); 
    string _tooltipmsg = "Canvas: " + vc.ZoomableCanvas.Name; 
    // Assign ToolTip Values for User 
    _tooltipmsg += "\nX: " + vc.gCurrentX; 
    _tooltipmsg += "\nY: " + vc.gCurrentY; 
    _rectangle.ToolTip = _tooltipmsg; 
    _rectangle.Name = _vehicleobjectname; 
    //add to the canvas 
    vc.ZoomableCanvas.Children.Add(_rectangle); 
} 

Примечание: VehicleClass содержит все значения для определенного автомобиля. DrawingQ имеет масштаб преобразования от реальности до масштабируемого холста. Поэтому вопросы, которые я предвижу:

  1. Как приобщить Размер файла Jpeg, чтобы получить размер такой же, как прямоугольник?
  2. Какой вид объекта я должен использовать? Пожалуйста, укажите .
+2

Является ли это WinForms или WPF ? – series0ne

+0

@ series0ne Я использую WPF, а не формы. Извините, что не упоминал раньше! –

+0

Посмотрите на это: http://stackoverflow.com/questions/12866758/placing-bitmap-in-canvas-in-c-sharp и http://stackoverflow.com/questions/14336597/adding-image-objects-to -wpf-with-code –

ответ

1

Если я undrestand вы правильно. вы хотели показать изображение пузырька внутри прямоугольника. для того, чтобы это сделать, вы можете использовать

ImageBrush и присвоенным прямоугольника Наполните свойству

что-то вроде этого

 Rectangle rect = new Rectangle(); 
     rect.Width = 100; 
     rect.Height = 100; 
     ImageBrush img = new ImageBrush(); 
     BitmapImage bmp = new BitmapImage(); 
     bmp.BeginInit(); 
     bmp.UriSource = new Uri("vehicle image path"); 
     bmp.EndInit(); 
     img.ImageSource = bmp; 
     rect.Fill = img; 

Я надеюсь, что помогает

Смежные вопросы