Сохраните эту картинку к себе на компьютер
Скачать ...
C#
Файл MainWindow.xaml.cs
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace WpfApp1
{
public class MyCanvas : Canvas
{
protected BitmapImage _imageFile1;
protected Point _imagePos1;
protected Size _imageSize1;
protected int _imageGoXStep1;
public void LoadFromResource()
{
// load file
string pathImage = "pack://application:,,,/WpfApp1;component/tree.jpg";
_imageFile1 = new BitmapImage(new Uri(pathImage, UriKind.Absolute));
_imagePos1 = new Point(10, 15);
_imageSize1 = new Size(50, 50);
_imageGoXStep1 = 1;
}
protected override void OnRender(DrawingContext drawingContext)
{
drawingContext.DrawImage(_imageFile1, new System.Windows.Rect(_imagePos1, _imageSize1));
}
public void MoveObjects()
{
_imagePos1.X += _imageGoXStep1;
}
public void ReDraw()
{
// InvalidateVisual() says Canvas to call OnRender
InvalidateVisual();
}
}
// MainWindow
public partial class MainWindow : Window
{
protected MyCanvas _myCanvas;
protected System.Windows.Threading.DispatcherTimer myTimer;
protected int TimeStepInMilliseconds = 100; // 1/10 second
public MainWindow()
{
InitializeComponent();
// remove child elements
Content = null;
// add Canvas
_myCanvas = new MyCanvas();
AddChild(_myCanvas);
// load image
_myCanvas.LoadFromResource();
// timer
myTimer = new System.Windows.Threading.DispatcherTimer();
myTimer.Tick += new EventHandler(OnMyTimerTick);
myTimer.Interval = new TimeSpan(0, 0, 0, 0, TimeStepInMilliseconds); // in milli second
myTimer.Start();
}
private void OnMyTimerTick(object sender, EventArgs e)
{
_myCanvas.ReDraw();
_myCanvas.MoveObjects();
}
}
}
Только нужно обрезать каждую часть и вывести на экран в отдельные image.
Есть картинка, в ней 5 иконок.
Эти 5 иконок нужно разместить на разные image1,image2...image5.
Как это можно реализовать? Гуглю уже сутки, ничего найти не могу.
Через <Image.Clip> не выходит сделать. Ибо там вначале картинка загружается, а потом уже редактируется, идей вообще не осталось :( ответить
Вопрос: картинка это файл с каким расширением jpg? ico? png? ответить
Предлагаю вот такой алгоритм в кратце:
1) Загрузить исходную png картинку в System.Drawing.Image imageSource
2) Кусочки
a) Вырезаем 1-ый кусок картинки из imageSource т.е. создаем BitmapImage bmpImage1
b) Вырезаем 2-ой кусок картинки из imageSource т.е. создаем BitmapImage bmpImage2
c) Вырезаем 3-ий кусок картинки из imageSource т.е. создаем BitmapImage bmpImage3
d) Вырезаем 4-ый кусок картинки из imageSource т.е. создаем BitmapImage bmpImage4
e) Вырезаем 5-ый кусок картинки из imageSource т.е. создаем BitmapImage bmpImage5
3) Создаем
a) System.Drawing.Image image1 используя bmpImage1
b) System.Drawing.Image image2 используя bmpImage2
c) System.Drawing.Image image3 используя bmpImage3
d) System.Drawing.Image image4 используя bmpImage4
e) System.Drawing.Image image5 используя bmpImage5
Если есть вопросы в реализации какй-то части пиши ответить
Мне нужно изменить у 3 image картинки на другие, при клике, пытался передать через Binding, но тупо не понимаю как правильно забиндить image и как правильно к нему в коде обратиться.
Ибо Binding имя он не видит, на x:Name(class1) он тоже не отвечает.
Писал так: class1.ViewBox = (0,0,10,10); но тут ошибка.
Вообще не понимаю как программно можно viewbox поменять ответить
public ImageSource myImg { get; set; }
еще добавить в код DataContext:
this.DataContext = this;
А в xml файле указать Image вот так:
<Image Source="{Binding myImg}"/>
Использовать x:Name не очень хороший стиль, лучше использовать Binding
Ниже пример Binding изображения на xaml Image: ответить