2015-12-17 7 views
6

enter image description here Dieses Tool, das ich in Visual Basic 2010 geschrieben habe, sollte den Bildern einen Autorentext hinzufügen. Der Benutzer kann die Deckkraft und Position der Schriftart festlegen. Um die Dinge leichter zu machen, wollte ich ein paar Positionsvoreinstellungen, wie man in der rechten unteren Ecke sehen kann. Die Berechnung Ich benutze ist (unten rechts in diesem Fall:Platzieren von Text im Bild auf Kanten

Dim textSize As Size = TextRenderer.MeasureText(tagString + curText, curFont) 
tmpPos = New Point(srcImg.Width - textSize.Width - 10, srcImg.Height - textSize.Height - 10) 

Wie Sie sehen, das funktioniert perfekt für dieses Beispiel Bild Wo, wie bei einigen der Text nur Clips aus enter image description here

erste.. : 1024x768 | Erkannte Schriftgröße: 680x72

Second One: 1688x1125 | erkennen Schriftgröße: 680x72

ich vermute, das etwas mit dem Seitenverhältnis der Bilder zu tun hat, aber ich weiß nicht, wie man repariere es.

wird der Text so gezeichnet:

brush = New SolidBrush(color.FromArgb(alpha, color)) 
     gr = Graphics.FromImage(editImg) 
     gr.DrawString(tagString + text, font, brush, pos) 
     HauptBild.Image = editImg 

fand ich diese http://www.codeproject.com/Articles/20923/Mouse-Position-over-Image-in-a-PictureBox und es meine Fragen beantwortet.

+0

können Sie den Code einfügen, der den Text bitte platziert? –

+0

pls Code hinzufügen, können Sie nur den Code, der das Bild ändern? –

+0

Einige Codes werden wirklich hilfreich sein – Ian

Antwort

1

tritt dieses Problem nur in Ihrer Vorschau oder auch in der konvertierten Datei auf? Bitte poste den Code, wie du das neue Bild speicherst. Ich denke du hast einen Sizemode in deiner Picturebox gesetzt, das ist das Problem. Versuchen Sie es ohne den Sizemode.

0

Ist besser, mehr Ihren Code zu sehen, aber, wie ich TextRenderer Klasse verstehe, ist es System.Windows.Forms. Verwenden Sie einfach keine Grafik, die aus der Steuerung erstellt wurde (ich nehme an, es ist BildBox mit Sizemode: Zoom), verwenden Sie Grafiken, die stattdessen aus Ihrem Bild erstellt werden.

Hier ist Code (sorry, C#), der Bild aus Datei lädt, zeichnet Text ausgehend von der gleichen Koordinate und Orte auf puctureBox1. Der Text beginnt immer von Punkt (100,100).

OpenFileDialog openFileDialog1 = new OpenFileDialog(); 

    openFileDialog1.Filter = "Image files|*.jpeg;*.png;*.jpg;*.gif;*.bmp"; 
    if(openFileDialog1.ShowDialog() == DialogResult.OK) 
    { 
     try 
     { 
      Bitmap orig=(Bitmap)Bitmap.FromFile(openFileDialog1.FileName); 
      //workaround for images with color table, see remarks here https://msdn.microsoft.com/en-us/library/system.drawing.graphics.fromimage(v=vs.110).aspx 
      Bitmap bmp=orig.Clone(new Rectangle(0, 0, orig.Width, orig.Height), System.Drawing.Imaging.PixelFormat.Format32bppPArgb); 
      Graphics g = Graphics.FromImage(bmp); 
      g.DrawString("hello", new Font(this.Font.FontFamily,30,FontStyle.Bold) , new System.Drawing.SolidBrush(System.Drawing.Color.Yellow), new Point(100, 100)); 
      this.pictureBox1.Image = bmp; 
      orig.Dispose(); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Something goes wrong: " + ex.Message+ "\\n"+ ex.StackTrace); 
     } 
    }