На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Динамически изменяющееся выделение pictureBox'a
    Проблема в следующем. Есть pictureBox с картинкой, нужно чтобы при движении по нему мышкой рисовался прямоугольник, изменяющийся в зависимости от положения курсора. Но на битмапе не отрожался. Буду признателен за любые идеи.
      Я это, правда, уже писал в какой-то теме.. пробуй ;)
      ExpandedWrap disabled
        public partial class Form2 : Form
        {
                public Form2()
                {
                    InitializeComponent();
                    this.pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint);
                    this.pictureBox1.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
                    this.pictureBox1.MouseMove += new MouseEventHandler(pictureBox1_MouseMove);
                    this.pictureBox1.MouseUp += new MouseEventHandler(pictureBox1_MouseUp);
                }
         
                private int X0, Y0, curX, curY;
                private bool fMouseDown;      
         
                private void pictureBox1_Paint(object sender, PaintEventArgs e)
                {
                    if (fMouseDown)
                    {
                        if (X0 <= curX)
                        {
                            if (Y0 <= curY)
                            {
                                e.Graphics.DrawRectangle(new Pen(Color.Black), new Rectangle(X0, Y0, curX - X0, curY - Y0));
                            }
                            else
                            {
                                e.Graphics.DrawRectangle(new Pen(Color.Black), new Rectangle(X0, curY, curX - X0, Y0 - curY));
                            }
                        }
                        else
                        {
                            if (Y0 <= curY)
                            {
                                e.Graphics.DrawRectangle(new Pen(Color.Black), new Rectangle(curX, Y0, X0 - curX, curY - Y0));
                            }
                            else
                            {
                                e.Graphics.DrawRectangle(new Pen(Color.Black), new Rectangle(curX, curY, X0 - curX, Y0 - curY));
                            }
                        }
                    }
                }  
         
                private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
                {
                    fMouseDown = true;
                    X0 = e.X;
                    Y0 = e.Y;
                }
         
                private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
                {
                    if (fMouseDown)
                    {
                        curX = e.X;
                        curY = e.Y;
                        this.pictureBox1.Refresh();
                    }
                }
         
                private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
                {
                    fMouseDown = false;
                }
        }
        Огромное Спасибо TohaSan. То что нужно. :D
          TohaSanТы случаем не знаеш, как изменить resolution у bitmap'a? :)
            метод SetResolution ;)
              Sorry, я не то имел ввиду. У меня есть картинка ч/б 35*27 тчк, мне нужно засунуть её в 10*10 тчк.
              Я грешным делом попробовал следующее
              ExpandedWrap disabled
                 public Bitmap ChangeResolution(Bitmap btm)
                        {
                            int width = btm.Width;
                            int height = btm.Height;
                            Bitmap dstbtm=new Bitmap(10,10);
                            Color cl=new Color();
                            int count=0;
                            for (int i = 0; i < width; i+=width/10)
                                for (int j = 0; j < height; j+=height/10)
                                {
                                     cl= btm.GetPixel(i, j);
                                }
                            for (int i=0;i<10;i++ )
                                for(int j=0; j<10; j++)
                                {
                                                  
                                  dstbtm.SetPixel(i , j , cl);
                                }
                            return dstbtm;
                    }



              Но проблема с cl. Уже задолбался. :wall:
              Сообщение отредактировано: dammian -
                Не надо так делать.
                Пусть bmp10 - картинка 10*10, bmp35 - та, которую надо засунуть.
                ExpandedWrap disabled
                  Graphics g = Graphis.FromImage(bmp10);
                  g.DrawImage(bmp35, 0, 0, bmp10.Width, bmp10.Height);

                Как-то так
                  Ещё не забудь написать
                  ExpandedWrap disabled
                                        g.CompositingQuality = CompositingQuality.HighQuality;
                                        g.InterpolationMode = InterpolationMode.HighQualityBicubic;

                  перед DrawImage для улучшения качества ресайза.
                    WDK, Спасибо, помогло. :D
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0264 ]   [ 16 queries used ]   [ Generated: 2.05.24, 15:17 GMT ]