Фон: в настоящее время я занят показом позиции транспортного средства на масштабируемом холсте на основе позиции (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
имеет масштаб преобразования от реальности до масштабируемого холста. Поэтому вопросы, которые я предвижу:
- Как приобщить Размер файла Jpeg, чтобы получить размер такой же, как прямоугольник?
- Какой вид объекта я должен использовать? Пожалуйста, укажите .
Является ли это WinForms или WPF ? – series0ne
@ series0ne Я использую WPF, а не формы. Извините, что не упоминал раньше! –
Посмотрите на это: http://stackoverflow.com/questions/12866758/placing-bitmap-in-canvas-in-c-sharp и http://stackoverflow.com/questions/14336597/adding-image-objects-to -wpf-with-code –