2015-12-17 50 views
6

enter image description here Questo strumento che ho scritto in Visual Basic 2010 dovrebbe aggiungere un testo dell'autore alle immagini. L'utente è in grado di impostare l'opacità e la posizione del font. Per semplificare le cose, volevo alcuni preset di posizione come si può vedere nell'angolo in basso a destra. Il calcolo che sto usando è (in basso a destra, in questo caso:Posiziona testo nell'immagine sui bordi

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

Come si può vedere questo funziona perfettamente per questo esempio immagine Dove, come in alcuni il testo appena clip fuori enter image description here

primo.. : 1024x768 | rilevato Font Size: 680x72

secondo: 1688x1125 | rilevato Font Size: 680x72

ho il sospetto che questo ha qualcosa a che fare con il rapporto di aspetto delle immagini, ma non so come aggiustalo.

Il testo è tratto così:

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

ho trovato questo http://www.codeproject.com/Articles/20923/Mouse-Position-over-Image-in-a-PictureBox e risposto alle mie domande.

+0

puoi includere il codice che posiziona il testo per favore? –

+0

pls aggiungi del codice, puoi semplicemente inserire il codice che modifica l'immagine? –

+0

Alcuni codici saranno davvero utili – Ian

risposta

1

questo problema si verifica solo nell'anteprima o anche nel file convertito? Si prega di inviare il codice come si salva la nuova immagine. Penso che tu abbia impostato un sizemode nella tua picturebox, che è il Problema. Provalo senza il sizemode.

0

Sarà meglio vedere più codice, ma, come ho capito dalla classe TextRenderer, è System.Windows.Forms. Basta non usare la grafica, creata dal controllo (suppongo che sia pictureBox con sizemode: Zoom), usa invece la grafica, creata dalla tua immagine.

Questo è il codice (mi dispiace, C#), che carica l'immagine dal file, disegna il testo partendo dalla stessa coordinata e posiziona su puctureBox1. Il testo inizia sempre dal punto (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); 
     } 
    }