picturebox i zaznaczenie obszaru zdjecia

0

witam...chce zrobic sobie prosty image editor tak dla treningu....hahaha
do rzeczy chce zrobic proste zaznaczanie obszaru zdjecia ktore ma zostac wyciete....dokladnie to samo co jest na facebook'u gdy dodajemy zdj. profilowe...

ogolnie nie wydaje mi sie to trudne...mysle ze eventy: mousemove/mouseup/mousedown i mouselick wystarcza.....

poki co chcialem sprawdzic czy mozna narysowac przezroczysty prostakat na picturebox:

 
        private void Form1_Load(object sender, EventArgs e)
        {

            Graphics g = CreateGraphics();
            Pen p = new Pen(Color.FromArgb(100, 200, 200, 200), 10);
            g.DrawRectangle(p, 20, 20, 300, 200);
            g.Dispose();


        }

Jednak nie widze zeby cos sie pojawialo na moim obrazu...czy ktos moze pomoc...co robie zle?

1

Rysuj w zdarzeniu OnPaint pictureBox. Do zdarzenia dołączany jest obiekt klasy PaintEventArgs, który zawiera obiekt Graphics. Parę przykładów oczywiście na msdn: http://msdn.microsoft.com/en-us/library/system.windows.forms.painteventargs.aspx

0

nie czaje tego .net'a mam taki kod:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private Rectangle rect;
        private Pen p;

        public Form1()
        {
            InitializeComponent();
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            this.p = new Pen(Color.FromArgb(100, 200, 200, 200), 5);
            e.Graphics.DrawRectangle(this.p, this.rect);
            e.Graphics.Dispose();
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {

            if (e.X < this.rect.X)
            {
                this.rect.Width = this.rect.X - e.X;
                this.rect.X = e.X;
            }
            else
            {
                this.rect.Width = e.X - this.rect.X;
            }

            if (e.Y < this.rect.Y)
            {
                this.rect.Height = this.rect.Y - e.Y;
                this.rect.Y = e.Y;
            }
            else
            {
                this.rect.Height = e.Y - this.rect.Y;
            }

            this.Invalidate(this.rect);

        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            this.rect.X = e.X;
            this.rect.Y = e.Y;
        }

    }
}
 

A daje mi error :

 Application.Run(new Form1());

Parameter is not valid.

wtf?

0

a gdzie inicjuesz rect ?????
W linijce:

 e.Graphics.DrawRectangle(this.p, this.rect);

próbuje użyc rect, który nie jest wcześniej zainicjowany.

0

tak masz racje...ale skoro rect to struktura...powinna byc Od razu wypelniana wszedzie 0...lub sie myle?tzn zmienna bylaby null a struktura ustwia sie chyba na 0

0

Witam, wiem że trochę odkop ale potrzebuje takiego programu właśnie, obecnie zrobiłem rectangle na pictureboxie, wczytuje do boxa obrazek, rectangle mogę skalować i przemieszczać po pictureboxie (funkcje mouse move, up, down). Jednak jak wyciąć kawałek zdjęcia z pictureboxa, który zaznaczam w rectangle? I do tego zauważyłem że bitmapy zapisywane standardowo z C# maja ppi96, a zdjecia normalnie mają 72 bądź 300. Jak sobie z tym poradzić?

1 użytkowników online, w tym zalogowanych: 0, gości: 1