| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: mit c# zeichnen (hat wiklich keiner Rat?) im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Ihr dürft mich später schlagen, ich weis auch das es eine beginnneraufgabe ist, aber ich habe hier irgendwie arge ...
![]() |
| | #1 (permalink) |
| Registriert seit: 30.03.07 ![]() Likes: 17 | mit c# zeichnen (hat wiklich keiner Rat?) Anzeige Ihr dürft mich später schlagen, ich weis auch das es eine beginnneraufgabe ist, aber ich habe hier irgendwie arge schweirigkeiten... Zorn.... X( Möchte gerne über die MouseMove Methode mir eine Kries malen. Das ganze funktioniert insoweit nicht das der Krei nicht mit meiner Mouse übereintsimmt... Würde mich freuen wenn jemand die muze hat eventuell den Code durchzusehen... Wahrscheinlich ein Problem in meinem Kopf X( Code: Bitmap bmp;
System.Drawing.Graphics gr;
System.Drawing.Point startingpoint;
System.Drawing.Size size;
System.Drawing.Pen stift = new System.Drawing.Pen(Color.Black);
System.Drawing.SolidBrush mybrush = new SolidBrush(Color.Black);
System.Drawing.Font drawFont = new Font("Arial", 9, FontStyle.Regular);
System.Drawing.Pen pen = new Pen(Color.DarkRed,2);
System.Drawing.SolidBrush myImagebrush = new SolidBrush(Color.Orange);
System.Drawing.Font drawImageFont = new Font("Arial", 12, FontStyle.Regular);
bool mouseClick = false;
int breite;
int hoehe;
public Form1()
{
InitializeComponent();
this.pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.paint_MouseDown);
this.pictureBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.paint_MouseUp);
this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.paint_MouseMove);
bmp = new Bitmap(400, 400);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = bmp;
gr = Graphics.FromImage(bmp);
// Name des Mitarbeiter mit einzeichnen
gr.DrawString("Blas Blaa", drawFont, mybrush, 0, 0);
pictureBox1.Refresh();
}
private void paint_MouseDown(object sender, MouseEventArgs e)
{
mouseClick = true;
size = new System.Drawing.Size();
startingpoint = new System.Drawing.Point();
startingpoint = MousePosition;
}
private void paint_MouseMove(object sender, MouseEventArgs e)
{
if(mouseClick == true)
{
bmp = new Bitmap(300, 300);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = bmp;
gr = Graphics.FromImage(bmp);
pictureBox1.Refresh();
breite = e.X - startingpoint.X;
hoehe = e.Y - startingpoint.Y;
size.Height = hoehe;
size.Width = breite;
Rectangle kreis = new Rectangle(startingpoint, size);
if(rdCircle.Checked == true)
{
gr.DrawEllipse(pen, kreis);
}
else if(rbRectangle.Checked == true)
{
gr.DrawRectangle(pen, kreis);
}
pictureBox1.Refresh();
}
}
private void paint_MouseUp(object sender, MouseEventArgs e)
{
mouseClick = false;
size.Width = 0;
size.Height = 0;
breite = 0;
hoehe = 0;
}
private void button1_Click_1(object sender, EventArgs e)
{
rdCircle.Checked = false;
rbRectangle.Checked = false;
bmp = new Bitmap(300, 300);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = bmp;
gr = Graphics.FromImage(bmp);
pictureBox1.Refresh();
} |
| | |
| | #2 (permalink) |
| Registriert seit: 31.03.08 ![]() Likes: 0 | Wie stimmt nicht überein? Meinst du das der Kreis an der falschenStelle ist? Beim Programmieren ist es ja so, dass Pos. Daten immer von der oberen linken Ecke ausgehen, nicht von der Mitte. Bei Kreisen eben dann von der Ecke des Quadrats, das den Kreis umfassen könnte. Weiß nicht ob du das meintest Was ist den mit dieser Mthode: private void button1_Click_1(object sender, EventArgs e) Click_1 wird die überhaupt aufgerufen? |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) | ||
| Themenstarter Registriert seit: 30.03.07 ![]() Likes: 17 | Erstmal Danke für Deine RE Post. Fange mal an... Im gegensatz zu Java wird bei C# der Kreis in einem Rechteck dargestellt. hierzu gebe ich die linke obere ecke des Rechtecks mit. Merke mir das agnze im startingPoint in der Methode Code: private void paint_MouseDown(object sender, MouseEventArgs e)
{
mouseClick = true;
size = new System.Drawing.Size();
startingpoint = new System.Drawing.Point();
startingpoint = MousePosition;
} Code: private void paint_MouseMove(object sender, MouseEventArgs e)
{
if(mouseClick == true)
{
bmp = new Bitmap(300, 300);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = bmp;
gr = Graphics.FromImage(bmp);
pictureBox1.Refresh();
breite = e.X - startingpoint.X;
hoehe = e.Y - startingpoint.Y;
size.Height = hoehe;
size.Width = breite;
Rectangle kreis = new Rectangle(startingpoint, size);
if(rdCircle.Checked == true)
{
gr.DrawEllipse(pen, kreis);
}
else if(rbRectangle.Checked == true)
{
gr.DrawRectangle(pen, kreis);
}
pictureBox1.Refresh();
}
} Code: private void button1_Click_1(object sender, EventArgs e)
{
rdCircle.Checked = false; //Radio Button für Kreis zeichnen
rbRectangle.Checked = false; // Radio Button für Rechteck zeichnen
bmp = new Bitmap(300, 300);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Image = bmp;
gr = Graphics.FromImage(bmp);
pictureBox1.Refresh();
} Zitat:
Wenn ich die Mouse dann bewege wird der Kreis zwar gezeichnet und das Bild auch immer wieder neu dargestellt, jedoch ist der Abstand der Mouse beim ziehen immer weiter vom Kreis entfernt. Könnte mir letzteres so erklären das wir ja von einem Rechteck ausgehen und hier läuft der Kreis ja nicht in dei Ecke rein. Sozusagen ein leeraum im Breich der Ecken. Bin da wirklich etwas überfragt. Zitat:
die noch vorhanden Methode dint dazu die oberfläche zu erneuern. sprich wenn der Benutzer das Bild einmal neu darstellen will ohne irgendwelche Drawings... kann das ganze gerne zippen und dir geben... Merci & Greetz | ||
| | |
| | #4 (permalink) |
| Registriert seit: 31.03.08 ![]() Likes: 0 | Könntest du mal nen screenshot und das fertige Programm hochladen? Hab keine bock jetzt nen c# compiler zu suchen.... |
| | |
| | #5 (permalink) |
| Themenstarter Registriert seit: 30.03.07 ![]() Likes: 17 | So hier die kleine Applikation. kein Grafisches Highlight. Nur um die Sache ansich zu testen.. |
| | |
| | #6 (permalink) | |
| Hi, Zitat:
Ansonsten währe es vom Style her schöner die Funktionalität in einer von System.Windows.Panel abgeleuiteten Klasse zu kapseln. Mag aber auch geschmacks Sache sein. code Was mir in deiner hochgeladenen exe auffällt: Code: private void paint_MouseDown(object sender, MouseEventArgs e)
{
this.mouseClick = true;
this.size.Width = 0;
this.size.Height = 0;
this.breite = 0;
this.hoehe = 0;
this.startingpoint.X = 0;
this.startingpoint.Y = 0;
this.size = new Size();
this.startingpoint = new Point();
this.startingpoint = Control.MousePosition;
} Aber viel interessanter ist " this.startingpoint = Control.MousePosition;", denn Control.MousePosition gibt laut MSDN Bildschimrkoordianten zurück. Brauchen würden wir aber Clientkoordinaten. Nutz lieber vom MouseEventArgs die Location Eigenschaft. Hoffe das hilf ein wenig weiter MfG | ||
| | |
| | #7 (permalink) | ||
| Themenstarter Registriert seit: 30.03.07 ![]() Likes: 17 | Zitat:
![]() Zitat:
Greetz... P.S. gibt es keine möglichkeit die Lücken der Ecken auszugleichen? Wenn der Kreis nicht Oval ist könnte man sich das ableiten anhand der seiten bzw. den Radius des Kreises und sich hin rechnen also seite des rechteckes a/2 2. seite des rechteckes b/2 Betrachten vom Mittelpunkt könnte ich mir die länge bis zur ecke vom Mittelpunkt ausrechnen. kleine subtraktion hinterher und man hätte die differenz!!! Mmmmh... Ist bei einem Ovalen aber dezent anders??? Hat jemand eine andere Idee? | ||
| | |
| | #8 (permalink) |
| Registriert seit: 02.12.03 ![]() Likes: 0 | Hi! Ich hoffe, dass ich dein Problem richtig verstanden habe... Guck dir mal die pictureBox1_MouseMove Methode an. Du musst einfach die aktuelle Mausposition mit der Startposition subtrahieren. Das ist dann die Höhe bzw. Breite, die zu deinem bisherigem Kreis addiert werden muss (der Wert kann auch Minus sein, wenn du die Maus Links von der Startposition bewegst, drawEllipse zeichnet dann den Kreis halt andersrum). Code: using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
private Point p;
private int ellipseHeight;
private int ellipseWidth;
private bool mouseDown;
public Form1()
{
InitializeComponent();
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
p.X = e.X;
p.Y = e.Y;
mouseDown = true;
pictureBox1.Refresh();
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (mouseDown)
{
ellipseWidth = (e.X - p.X);
ellipseHeight = (e.Y - p.Y);
//Ruft Paint() von der PictureBox auf
pictureBox1.Refresh();
}
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
if (mouseDown)
{
g.DrawEllipse(Pens.Red, p.X, p.Y, ellipseWidth, ellipseHeight);
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
mouseDown = false;
p = new Point();
ellipseWidth = 0;
ellipseHeight = 0;
}
}
} Grüße haX Edit: Ups, hatte den Code von System net gesehen (verdammter Show/Hide Button :-/). Hat sich ja dann erledigt. |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Mit der WinAPI zeichnen | nookstar | Code Kitchen | 9 | 24.07.09 19:19 |
| C++ | Convert bmp to jpg | Keiner ne Ahnung? | slightlyNERD | Code Kitchen | 0 | 11.05.09 16:14 |
| Wenn man will das ja keiner was ließt: | Stein | Fun Section | 7 | 02.01.09 19:54 |
| Linien zeichnen | :::Lük::: | (Web-) Design und webbasierte Sprachen | 5 | 18.02.08 18:19 |
| Kennt keiner den BOFH??? | cpt.jonti | Fun Section | 15 | 24.06.06 08:52 |