2010-12-29 13 views
2

Wenn ich versuche, ein Bild über ein anderes zu ziehen # mit Grafikbibliothek C den kleinen skalieren und decken die erste:Wie kann ich mit der Grafikbibliothek C# ein kleines Bild über ein Bild zeichnen?

public Form1() 
    { 
     //InitializeComponent(); 
     read_file(); 
     InitializeComponent1(); 
     SetStyle(ControlStyles.Opaque, true); 
     // theImage = new Bitmap("F:/4th year/1st Term/sensor network/proj/reconstructscene/reconstructscene/images/tryImage.jpg"); 
     theImage2 = new Bitmap("F:/4th year/1st Term/sensor network/proj/reconstructscene/reconstructscene/images/1.jpg"); 
     // theImage = new Bitmap(newImage); 
     theImage = new Bitmap("F:/4th year/1st Term/sensor network/proj/reconstructscene/reconstructscene/images/tryImage.jpg"); 
    } 
    protected override void OnPaint(PaintEventArgs e) 
    { 
     Graphics g = e.Graphics; 
     //e.Graphics.SmoothingMode = SmoothingMode.HighQuality; 
     //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
     //e.Graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; 
      g.DrawImage(theImage, ClientRectangle); 
     // Create pen. 
     g.FillRectangle(new SolidBrush(Color.Red), 50, 50, 50, 50); 
     RectangleF recto = new System.Drawing.RectangleF(50, 50, 50, 50); 
     Pen blackPen = new Pen(Color.Black,1); 

     g.DrawRectangle(blackPen, 50, 50, 50, 50); 
     g.DrawImage(theImage2, ClientRectangle); //this will cover the 1st one 
    } 
+0

Verwenden Sie ein kleineres Rechteck :) –

+0

nur vergessen Sie das Rechteck, und nein, das Rechteck ist klein bereits verwenden sollte :) – Emykindman

Antwort

3

Haben Sie stattdessen:

g.DrawImage(theImage2, 0, 0, theImage2.Width, theImage2.Height); 

Dieses das Bild ziehen sollte in der "richtigen" Stelle, ohne es zu dehnen.

+0

: D es ist Arbeiten: D, vielen Dank – Emykindman

+0

: D es funktioniert: D, vielen Dank, ich habe ein anderes Problem, würden Sie mir sagen, wenn ich diese Arbeit mehrmals wiederholen will, hängen von der Aktualisierung einer Datei, wenn die Szene ändert, so Muss ich diese Funktion OnPaint mehrmals aufrufen ?? , eigentlich kenne ich nicht den Mechanismus, den diese Funktion benutzt. – Emykindman

+0

@Emykindman das in der OnPaint zu haben ist sehr "schwer" Sie sollten es wirklich vermeiden - angenommen, Sie hatten einen guten Grund, es dort zu haben. Sie können stattdessen das PictureBox-Steuerelement verwenden und das Bitmap ändern, wenn sich die Datei ändert. –

-1

Blick auf draw on image

insteed DrawString Sie DrawImage

+2

Wo bist du siehe 'DrawString' ?? –

+0

Erstellen Sie ein Objekt von System.Drawing.Graphics und dieses Objekt hat Methode DrawString siehe http://msdn.microsoft.com/en-us/library/system.drawing.graphics.drawstring(VS.71).aspx – Serghei

+1

@ Shadow Wizard fragte nach dem Code, der in der ursprünglichen Frage gepostet wurde. Wo erscheint 'DrawString' in diesem Code? Du hast gesagt, er sollte 'DrawImage' anstelle von' DrawString' verwenden, aber (s) er benutzt 'DrawString' nicht an erster Stelle. –

-2
private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     System.Drawing.Graphics graphicsObj; 

     graphicsObj = this.CreateGraphics(); 

     Font myFont = new System.Drawing.Font("Helvetica", 40, FontStyle.Italic); 

     Brush myBrush = new SolidBrush(System.Drawing.Color.Red); 

     graphicsObj.DrawString("Hello C#", myFont, myBrush, 30, 30); 

    } 
+0

-1 Dies beantwortet die Frage * nicht *. Sie zeichnen überhaupt kein Bild, geschweige denn ein kleines über ein größeres. Dieser Code zeichnet eine Textzeichenfolge. –

Verwandte Themen