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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2010, 21:55   #1
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию Рисование линии

Нада рисование линии как в Пеинт у меня рисует но я перерисовую линии в белый как етого избежать???
Вложения
Тип файла: zip write_image.zip (37.1 Кб, 21 просмотров)
Cpluser вне форума Ответить с цитированием
Старый 28.04.2010, 02:39   #2
(IICuX)
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 22
По умолчанию

можно использовать слои
(IICuX) вне форума Ответить с цитированием
Старый 28.04.2010, 07:12   #3
Aexx
Программист тьмы
Форумчанин
 
Аватар для Aexx
 
Регистрация: 02.09.2009
Сообщений: 227
По умолчанию

http://www.gotdotnet.ru/forums/3/61342/296075/
Почитайте, ваш случай
Aexx вне форума Ответить с цитированием
Старый 28.04.2010, 10:39   #4
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Aexx спасибо я уже видел ето но не вишло.Если у вас вышло можете кинуть код пожалуста!!!
(IICuX) А можно поподробней.
Cpluser вне форума Ответить с цитированием
Старый 28.04.2010, 10:47   #5
Teksa
Пользователь
 
Регистрация: 24.08.2007
Сообщений: 88
По умолчанию

ну в качестве слоя можно использовать отрисовку поверх картинки image с установленным свойством transparent и нарисованной линией, правда перерисовка его на каждое движений мышки..хм незнаю может и рационально
Teksa вне форума Ответить с цитированием
Старый 28.04.2010, 10:55   #6
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Teksa пример кода можна.
Cpluser вне форума Ответить с цитированием
Старый 08.05.2010, 12:40   #7
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Может кто-то помоч?
Cpluser вне форума Ответить с цитированием
Старый 12.05.2010, 22:37   #8
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Ето уже получаетса как спам((
Люди добрые помогите!проект сверху!
Cpluser вне форума Ответить с цитированием
Старый 17.05.2010, 00:43   #9
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Э-э-эх, пришлось попотеть, но я сказал себе: -Я могу! И сделал.
Я конечно же надеюсь на повышение репутации

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace write_image
{
    public partial class Form1 : Form
    {
        bool first = true, dra;
        Point prev;
        Point old;
        Point pq;

        Pen p = new Pen(Color.Black, 2);
        Bitmap bmpReserv; //резервное изображение 
        Bitmap bmpNewImage; //новое
        Graphics gr, grForReservedImage, grForNewImage; //поверхности рисования, для разных целей
        BufferedGraphics bufferGraphics; 
        BufferedGraphicsContext bufferGraphicsContext;

        public Form1()
        {
            InitializeComponent();
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.SupportsTransparentBackColor, true);
            this.UpdateStyles();
            bmpReserv = new Bitmap(this.Width, this.Height);
            bmpNewImage = new Bitmap(this.Width, this.Height);

            grForNewImage = Graphics.FromImage(bmpNewImage); //получаем поверхность рисования bmpNewImage
            grForReservedImage = Graphics.FromImage(bmpReserv); //получаем поверхность рисования bmpReserv
            gr = Graphics.FromHwnd(this.Handle); //получаем поверхность рисования "Главное окно"

            bufferGraphicsContext = new BufferedGraphicsContext();
            bufferGraphicsContext = BufferedGraphicsManager.Current;
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                first = true;
                prev.X = e.X;
                prev.Y = e.Y;
                grForNewImage.DrawImage(bmpReserv, new Point(0, 0)); //то что было в резерве рисуем на bmpNewImage
            }
        }

        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            pq = new Point(e.X, e.Y);
            grForNewImage.DrawLine(p, prev, pq); //Рисуем на новом изображении линию по уже окончательным координатам
            grForReservedImage.DrawImageUnscaled(bmpNewImage, new Point(0, 0)); //рисуем на bmpReserv, то что на bmpNewImage
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                pq = new Point(e.X, e.Y);
                Pen pe = new Pen(Color.Black, 3);

                DrawToBuffer(); //отрисовываем в буфере
                //после того как в буфере уже всё отрисовано, просто
                bufferGraphics.Render();  //выводим единоразово на поверхность рисования

                old.X = e.X;
                old.Y = e.Y;
            }
        }

        /// <summary>
        /// Рисуем в буфере, чтобы не мерцало
        /// </summary>
        void DrawToBuffer()
        {
            //выставляем размер буфера "весь экран"
            bufferGraphicsContext.MaximumBuffer = new Size(this.Width + 1, this.Height + 1);

            bufferGraphics = bufferGraphicsContext.Allocate(gr,
                 new Rectangle(0, 0, this.Width + 1, this.Height + 1)); //создаём буфер
            
           //стираем прошлый рисунок с поверхности формы (пока в буфере)
            bufferGraphics.Graphics.FillRectangle(new SolidBrush(Color.White),
                new Rectangle(new Point(0, 0), new Size(this.Width, this.Height)));

            bufferGraphics.Graphics.DrawImageUnscaled(bmpReserv, new Point(0, 0)); //рисуем резервное изображение

            //проводим новую линию, поверх прошлых линий, которые сохранены в виде картинки в резервном bmpReserv
            bufferGraphics.Graphics.DrawLine(p, prev, pq); 
        }
    }
}
По большому счёту Graphics'ы на основе Bitmap'ов вполне могут служить слоями, главное не запутаться, что к чему там. Тока тут желательно сделать внутри формы какой нибудь холст, который будет иметь 1 размер, просто резервные картинки создаются по изначальным размерам формы. Хотя можно попробовать сделать их 2000х2000, может получиться, щас пробовать не буду, время спать

Последний раз редактировалось Casper-SC; 17.05.2010 в 07:12.
Casper-SC вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вертикальные линии в отчете Nikolaeva БД в Delphi 3 30.07.2019 09:45
Очистка линии женя2010 Microsoft Office Excel 8 21.04.2010 10:19
Рисование линии Cpluser Общие вопросы .NET 4 21.04.2010 00:15
динамические линии DIMEDROL1985 Помощь студентам 2 24.01.2010 00:37
ЛИНИИ УРОВНЯ (ПАСКАЛЬ) mens-evgenij Помощь студентам 1 22.05.2009 09:50