Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2010, 00:09   #1
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
Печаль О программисты, откройте мне секрет рисования в WPF

Я просто в шоке! Ну почему никак не могу нарисовать даже линию? Вот код, что я только не пробовал (жаль нет подходящего смайла, вы бы поняли как я замучался решая этот вопрос ).
Код:
        DrawingVisual drawingVisual = new DrawingVisual();
        DrawingContext drawingContext;
        ..........
        ..........
        private void DrawLine()
        {
            Brush brush = new SolidColorBrush(Colors.Tomato);

            Pen pen = new Pen(brush, 5.0d);
            drawingContext = drawingVisual.RenderOpen();
            drawingContext.DrawLine(pen, new Point(40, 40), new Point(200, 200));
            RenderTargetBitmap bmp = new RenderTargetBitmap(300, 300, 120, 96, PixelFormats.Pbgra32);
            bmp.Render(drawingVisual);
            this.image1.Source = bmp; //растянут на форме Image этот
        }

        private void image1_MouseDown(object sender, MouseButtonEventArgs e)
        {
            DrawLine();
        }
Casper-SC вне форума Ответить с цитированием
Старый 15.06.2010, 08:17   #2
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Код:
Point beg;
        bool isDraw = false;
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            isDraw = true;
            beg.X = e.X;
            beg.Y = e.Y;
            
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (isDraw)
            {
                Point end = new Point(e.X, e.Y);
                Pen pe = new Pen(System.Drawing.Color.Black, 2);
                Graphics gr = pictureBox1.CreateGraphics();
                gr.DrawLine(pe, beg, end);
                beg = end;
            }

        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            isDraw = false;
        }
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 15.06.2010, 13:40   #3
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Спасибо, но это не то. Это GDI, а мне нужно рисовать именно используя классы WPF. То есть, чтобы видеокарта рисовала, не процессор.

Да и не только из-за этого. Например можно нарисовать элипс и потом его двигать внутри окна. Вот пример, только как расчитать правильно движение я пока не разобрался:

Код:
        Ellipse blueRectangle;

        /// <summary>
        /// Creates a blue ellipse with black border
        /// </summary>
        public void CreateAnEllipse()
        {
            // Create an Ellipse
            blueRectangle = new Ellipse();
            blueRectangle.Height = 100;
            blueRectangle.Width = 200;
            blueRectangle.MouseDown += new MouseButtonEventHandler(blueRectangle_MouseDown);
            blueRectangle.MouseMove += new MouseEventHandler(blueRectangle_MouseMove);
            // Create a blue and a black Brush
            SolidColorBrush blueBrush = new SolidColorBrush();
            blueBrush.Color = Colors.Blue;
            SolidColorBrush blackBrush = new SolidColorBrush();
            blackBrush.Color = Colors.Black;

            // Set Ellipse's width and color
            blueRectangle.StrokeThickness = 4;
            blueRectangle.Stroke = blackBrush;

            // Fill rectangle with blue color
            blueRectangle.Fill = blueBrush;

            // Add Ellipse to the Grid
            LayoutRoot.Children.Add(blueRectangle); //LayoutRoot - это имя грида, который сразу есть в окне.
        }

        Thickness thick;

        void blueRectangle_MouseDown(object sender, MouseButtonEventArgs e)
        {
            thick = this.blueRectangle.Margin;
        }

        void blueRectangle_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.MouseDevice.LeftButton == MouseButtonState.Pressed)
            {
                Point posGrid = e.GetPosition(this.LayoutRoot); //позиция мыши относительно грида
                Point posRect = e.GetPosition(this.blueRectangle); //позиция мыши относительно элипса
                //тут как то считаем позицию и присваиваем ниже новую элипсу
                this.blueRectangle.Margin = thick; 
            }
        }

Последний раз редактировалось Casper-SC; 15.06.2010 в 14:06.
Casper-SC вне форума Ответить с цитированием
Старый 15.06.2010, 19:53   #4
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Поведали мне секрет, почему у меня ничего не рисовалось. Причина оказалась проста, надо было просто перед выводом изображения или вообще перед любым взаимодействием с drawingVisual закрывать drawingContext

Вот рабочий код:
Код:
        private void DrawLine()
        {
            Brush brush = new SolidColorBrush(Colors.Tomato);
            Image img = new Image();
            Pen pen = new Pen(brush, 7.0d);
            drawingContext = drawingVisual.RenderOpen();
            drawingContext.DrawLine(pen, new Point(40, 40), new Point(200, 200));
            //drawingContext.DrawRectangle(brush, pen, new Rect(new Point(30, 30), new Size(200, 150)));
            drawingContext.Close(); //должно быть из-за отсутствия этого были проблемы
            RenderTargetBitmap bmp = new RenderTargetBitmap(300, 300, 120, 96, PixelFormats.Pbgra32);
            bmp.Render(drawingVisual);
            this.image1.BeginInit(); //вроде это даже и не нужно
            this.image1.Source = bmp;
            this.image1.EndInit();   //как и это
        }
Только вот Image растянутый на форме не отображает нарисованную линию, если предварительно не вставить в конструкторе в этот Image какую нибудь картинку. Почему именно так для меня загадка.
Casper-SC вне форума Ответить с цитированием
Старый 18.06.2010, 20:33   #5
OrcXCyber
Web-программер
Пользователь
 
Аватар для OrcXCyber
 
Регистрация: 05.11.2009
Сообщений: 49
По умолчанию

учите XAML программисты... быстрее будет... я это серьезно...
OrcXCyber вне форума Ответить с цитированием
Старый 19.06.2010, 07:31   #6
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Цитата:
Сообщение от OrcXCyber Посмотреть сообщение
учите XAML программисты... быстрее будет... я это серьезно...
На XAML же вроде чисто задал начальный вид окна, шаблоны, биндинги, ну и прочие радости и всё. А кодом уже по ходу дела меняешь, что нужно. Или я ошибаюсь? Вообще стараюсь XAML учить немного, точнее познавать на практике, но например создавать шаблон, анимацию и прочее кодом пока не пробовал, просто в Expression Blend намного проще, хотя я конечно понимаю, что умение написать кодом самому это плюс.
Casper-SC вне форума Ответить с цитированием
Старый 06.10.2011, 09:32   #7
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Спустя год ответа я так и не дождался
Casper-SC вне форума Ответить с цитированием
Старый 07.10.2011, 13:06   #8
stilyaga_system
Новичок
Джуниор
 
Регистрация: 07.10.2011
Сообщений: 2
По умолчанию

ахах год прошол
stilyaga_system вне форума Ответить с цитированием
Старый 08.10.2011, 17:49   #9
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от stilyaga_system Посмотреть сообщение
ахах год прошол
ахах год прошел
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 26.11.2011, 19:26   #10
Goldcoding
Пользователь
 
Регистрация: 04.01.2010
Сообщений: 66
По умолчанию

Вот эта программа подойдет для начинающих в WPF. Рисует окружность, эллипс и т.д.
Goldcoding вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дайте мне несколько советов на тему рисования Eros C++ Builder 2 18.05.2010 12:11
Databinding in WPF Paysockee Общие вопросы .NET 0 21.08.2009 14:04
УВАЖАЕМЫЕ ПРОГРАММИСТЫ ОБЬЯСНИТЕ МНЕ ПОЖАЛУЙСТА ДИЛЕТАНТУ . дмитрий kjuby Свободное общение 1 13.07.2009 09:43
Раскройте секрет в файле (найти формулу) Jon63 Microsoft Office Excel 3 06.10.2007 17:04