Autor Beitrag
robby_robbt
Hält's aus hier
Beiträge: 14



BeitragVerfasst: So 28.11.10 23:02 
Hallo,
Ich versuche gerade ein Bild zu laden, es zu zoomen, darauf zu malen und dann Originalgröße zu speichern (mit dem gemalten Linien von mir selber natürlich auch drauf).
Das Zoomen dient zum genaueren Zeichnen.
Leider funktioniert bei mir momentan mal fast gar nichts da wollt ich fragen wie sowas gehn würde..?:/
Und wenn das mal geschafft ist wollt ich mal fragen ob es möglich ist das geladene Bild als Hintergrund zu laden und dann nur als Schablone zu benutzen? D.h. auf das Bild
dann zu maln aber zum Schluss nur das selbst gezeichnete zu speichern?
Würd mich freuen wenn ihr mir antworten könnt. :)
Vielen Dank im Vorraus
robby_robbt
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: So 28.11.10 23:51 
schau dir aml die Graphics-Klasse an. damit müsste vermutlich alles von dir gewünschte gehen ;)
robby_robbt Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: So 28.11.10 23:53 
Wo kann man die anschauen..?^^
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Mo 29.11.10 06:28 

Für diesen Beitrag haben gedankt: robby_robbt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 29.11.10 13:09 
Hallo robby_robbt,

wenn du dich noch ein bis zwei Wochen gedulden kannst, dann werde ich meine Paint#-Komponente veröffentlichen. Diese bietet dann die Möglichkeit, eine Zeichenkomponente in sein eigenes Programm zu integrieren, inkl. den Standard-Zeichenoperationen (Zeichnen, Linie, Rechteck, Füllen, Text, ...) sowie Selektion (Cut, Copy, Paste) und Zoom. Auch eine Farbpalette ist als Komponente enthalten.

Hier schon mal ein Testprogramm mit einer aktuellen Vorversion: www.bitel.net/dghm11...wnloads/WinPaint.zip
Im Anhang ist ein damit gezeichnetes Bild zu sehen (bisher ist das 'Laden' und 'Speichern' nur über Selection-Copy und -Paste möglich).

Zur Zeit fehlt noch ein Menü mit den Standard Datei- und Bearbeiten-Einträgen etc.

Außerdem ist das von dir gewünschte Zeichnen im Zoom-Modus noch nicht möglich, aber wenn ich einen Tester hätte, würde ich das auch noch umsetzen...

Ich werde die nächsten Tage dann das Testprogramm aktualisieren.

P.S. Die einzelnen Zeichenoperationen beruhen zum größten Teil auf den Graphics-Methoden - einzig das Füllen sowie RoundRect (abgerundete Rechtecke) sind direkt mit den WinAPI-Methoden (GDI) implementiert.

Und das Anzeigen eines Hintergrundbildes müßte direkt mit der BackgroundImage-Eigenschaft funktionieren (ich werde es mal austesten...)
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: robby_robbt
robby_robbt Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 29.11.10 15:15 
Vielen Dank für deinen Beitrag, aber leider kann ich nicht 2 Wochen warten. :/
Post mir mal dein Paint-Programm wenn es fertig ist!;)
Außerdem hat es mir schon mal sehr weitergeholfen, jetzt müsst ich nur noch wissen wie man auf gezoomte Bilder malt..?^^
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 29.11.10 15:57 
Das Problem bei gezoomten Bildern ist, daß du die Mausposition entsprechend umrechnen mußt (für alle Grafikoperationen), d.h. (e.X / Zoom, e.Y / Zoom).
robby_robbt Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 29.11.10 21:05 
Hilfe ich hab ganz google durchsucht und komme immer noch nicht weiter! :(
Helft mir bitte, hier ist mein Code:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
Image img;
bool schouldPaint = false;

void BtLoadClick(object sender, EventArgs e)
    {
      
      OpenFileDialog openFileDialog1 = new OpenFileDialog();
      openFileDialog1.Filter = "Alle Bildateien|*.jpg;*.jpeg;*bmp;*.png;*.gif|24-Bit-Bitmap (*.bmp)|*.bmp|Gif (*.gif)|*.gif|Jpeg|*.jpg;*.jpeg|Png (*.png)|*.png";
      openFileDialog1.FilterIndex = 1;
      
      if(openFileDialog1.ShowDialog() == DialogResult.OK)
      {
        System.Drawing.Image objImage = System.Drawing.Image.FromFile(openFileDialog1.FileName);
        img = objImage;
        pictureBox1.Image = objImage;
        
        grfx2 = pbEndSolidMask.CreateGraphics();
        grfx = pictureBox1.CreateGraphics();
      }
    }
    
void HScrollBar1Scroll(object sender, ScrollEventArgs e)              <-- Die Scrollbar mit der man den Zoom bestimmt
    {
      int factor = Convert.ToInt32(nudFactor.Value);  <-- DomainUpDown (1-10); mit ihr kann man den Zoom nochmal erhöhen bzw erniedrigen, d.h. Zoomscrollbar * FaktorDomainUpDown = Zoom
      if(e.NewValue > e.OldValue) {
        pictureBox1.Height = hScrollBar1.Value*factor;
        pictureBox1.Width = hScrollBar1.Value*factor;
      } else if(e.NewValue < e.OldValue) {
        pictureBox1.Height = hScrollBar1.Value*factor;
        pictureBox1.Width = hScrollBar1.Value*factor;
      }
    }
void PictureBox1MouseDown(object sender, MouseEventArgs e)
    {
      shouldPaint = true;
    }
    
void PictureBox1MouseMove(object sender, MouseEventArgs e)
    {
      if ( shouldPaint )
      {
        int radius = trackBar1.Value*2;
        int factor = Convert.ToInt32(nudFactor.Value);
        int zoomfactor = hScrollBar1.Value*factor;
        
        grfx2.FillEllipse(new SolidBrush(Color.Black), (e.X)/zoomfactor, (e.Y)/zoomfactor, radius, radius);  <-- funktioniert nicht.. Fehler: System.ArgumentException: Ungültiger Parameter.
        grfx.FillEllipse(new SolidBrush(Color.Black), e.X-(radius/2), e.Y-(radius/2), radius, radius);   Hier ebenfalls..
      }
    }
    
void PictureBox1MouseUp(object sender, MouseEventArgs e)
    {
      shouldPaint = false;
      grfx2.Save();           |
      grfx2.Dispose();        |
      grfx.Save();            | Ab da funktioniert dann natürlich auch nichts mehr..
      grfx.Dispose();         |
      pbEndSolidMask.Image.Save("SolidMask.png", System.Drawing.Imaging.ImageFormat.Png);      <-- Hier wird immer ein Fehler ausgegeben. So was wie: image ist null..
    }


Würd mich fruen wenn es euch (und mir^^) weiterhelfen würde.
robby_robbt

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Moderiert von user profile iconKha: B- durch Highlight-Tags ersetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 02.12.10 16:35 
So ich habe jetzt meine Paint#-Komponente veröffentlicht: Paint# - eine Zeichenkomponente.

Hier im Anhang habe ich auch noch mein Testprogramm hinterlegt...
Einloggen, um Attachments anzusehen!
robby_robbt Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 02.12.10 19:03 
Wo ist die im Anhang? Keine ahnung wo man das hier sieht..:/
Danke mal im Vorraus!:)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 02.12.10 19:58 
Wie, du siehst den Anhang nicht?

Egal, nimm einfach meinen "WinPaint.zip"-Link aus meinem ersten Beitrag (ist jetzt aktualisiert -) bzw. der Anhang ist auch unten bei der Komponentenbeschreibung im anderen Forum.