Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Масштабирование изображения нарисованного н Canvas, Вопрос о масштабировании изображения 
:(
    Опции темы
albert21
  Дата 23.12.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



Всем привет.

У меня возникла необходимость отобразить на одном "холсте" несколько изображений, одно на другом (короче карта с жирнами точками, которыми отмечены города). В MSDN решения этой задачи:

1) С использованием <DrawingGroup>;    -- (при этом способе возникли проблемы с отслеживанием клика по "городу")
2) С использованием класса DrawingVisual
    Привожу ключемые моменты 2 способа

Код

<Window x:Class="WpfMap.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300" Name="MainWindow" Loaded="WindowLoaded">
    <Grid>
        
        <Canvas Name="[color=orangered]map[/color]">           
        </Canvas>

    </Grid>
</Window>


Код

    public partial class Window1 : Window
    {
        ArrayList hitResultsList = new ArrayList();
        public Window1()
        {
            InitializeComponent();
        }

        private void WindowLoaded(object sender, EventArgs e)
        {
            MyVisualHost visualHost = new MyVisualHost();
            map.Children.Add(visualHost);           /[color=orangered]/тип map - Convas[/color]
        }
    }

        public class MyVisualHost : FrameworkElement
        {
            // Create a collection of child visual objects.
            private VisualCollection _children;

            public MyVisualHost()
            {
                _children = new VisualCollection(this);
                _children.Add(CreateDrawingImageMap());
               //здесь вызываются методы для добавления других элементов "сложного изображения"

            }

            private DrawingVisual CreateDrawingImageMap()
            {
                DrawingVisual drawingVisual = new DrawingVisual();
                DrawingContext drawingContext = drawingVisual.RenderOpen();
                Uri uri = new Uri(@"D:/Temp/WPF/WpfMap/WpfMap/mydata/russia_map.jpg", UriKind.RelativeOrAbsolute);
                BitmapSource src = new BitmapImage(uri);

                drawingContext.DrawImage(src, new Rect(0, 0, 3339, 2154));
                drawingContext.Close();

                return drawingVisual;
            }

            protected override int VisualChildrenCount
            {
                get { return _children.Count; }
            }

            // Provide a required override for the GetVisualChild method.
            protected override Visual GetVisualChild(int index)
            {
                if (index < 0 || index > _children.Count)
                {
                    throw new ArgumentOutOfRangeException();
                }

                return _children[index];
            }
        }



Картинка отображается, но её размер больше размера окна. Как масштабировать изображение построенное на объекте типа Convas???Увеличивать выбранные "мышкой" участки картинки???

Возможно подскажите лучший способ решения этой задачи
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
Partizan
Дата 23.12.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



albert21, RenderTransform/ScaleTransform


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
albert21
Дата 23.12.2008, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



Большущее спасибо!!!

Я вот до просмотра ответа партизана такой "извращённый" способ масштабирования (не увеличения) нащупал. Делает скорее всего тоже самое что и ScaleTransform, только опосредованно

Код

            private DrawingVisual CreateDrawingImageMap()
            {
                DrawingVisual drawingVisual = new DrawingVisual();
                DrawingContext drawingContext = drawingVisual.RenderOpen();
                Uri uri = new Uri(@"D:/Temp/WPF/WpfMap/WpfMap/mydata/russia_map.jpg", UriKind.RelativeOrAbsolute);
                BitmapSource src = new BitmapImage(uri);

                ImageBrush brush = new ImageBrush(src);
                drawingContext.DrawRectangle(brush, (Pen)null, new Rect(0, 0, ширина окна , высота окна));
                
                drawingContext.Close();
                return drawingVisual;

            }


Может пригодится для кому-нибудь для чего-нибудь
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.