2015-09-16 4 views
0

Je dois ajouter un texte à une image si mon programme n'est pas activé. Ce texte devrait remplir toute l'image. Il devrait également envelopper et mettre à l'échelle pour s'adapter à l'image au besoin.C# Ajustement du cordon à l'image avec Wordwrap

J'ai trouvé beaucoup de solutions de travail pour ajouter ce texte à la taille de l'image. Mais dans tous les cas, il s'agit d'une seule ligne de texte, et je ne vais donc pas envelopper comme je le veux aussi.

Comment puis-je définir la taille de police en fonction de l'image et utiliser wordwrap?

EDIT: C'est une application winforms.

EDIT 2: Ce que j'ai essayé de faire:

FileStream fs = new FileStream(this.MasterPath + @"\***\***\***\" + file.Name, FileMode.Open, FileAccess.Read); 
Image img = Image.FromStream(fs); 
fs.Close(); 
Bitmap b = new Bitmap(img); 
Graphics graphics = Graphics.FromImage(b); 

string text = "Some Text"; 
StringFormat stringFormat = new StringFormat(); 
stringFormat.Alignment = StringAlignment.Center; 
stringFormat.LineAlignment = StringAlignment.Center; 
Font font = new Font("Arial", 120, FontStyle.Regular, GraphicsUnit.Pixel); 
SolidBrush brush = new SolidBrush(Color.FromArgb(128, Color.Red)); 

Rectangle rec = new Rectangle(0, 0, b.Width, b.Height); 
float sy = (float)b.Height/(float)1240; //I used 1240 and 1844 because on an image with 
float sx = (float)b.Width/(float)1844; //this size the text had the right size 
graphics.ScaleTransform(sx, sy); 
graphics.DrawString(text, font, brush, rec, stringFormat); 

b.Save(this.MasterPath + @"\***\***\***\" + file.Name, img.RawFormat); 
img.Dispose(); 
b.Dispose(); 
+0

Vous avez omis de mentionner l'application que vous faire? Win Forms, Web App, Application mobile, ...? Et pourquoi ne pas simplement créer une image par défaut qui peut être mise à l'échelle à la taille dont vous avez besoin? – Oceans

+0

Oh désolé, c'est une application winforms. –

+0

Je n'utilise pas d'image par défaut, car la relation entre la largeur et la hauteur de l'image cible est différente, donc le texte de l'image par défaut sera étiré ou si je centre l'image par défaut, ne couvrira pas toute l'image –

Répondre

1

Il est un concept vraiment difficile de travailler.

Je pense que la solution la plus simple serait de remplacer le graphique de votre formulaire par un contrôle RichTextBox et de modifier la mise en page afin qu'elle soit transparente.

Ensuite, vous pouvez utiliser la solution expliquée here (par @ blak3r) pour obtenir le résultat souhaité.


EDIT:
Si vous voulez une image de celui-ci, vous pouvez utiliser le code suivant:

Bitmap bmp = new Bitmap(richTextBox1.Width, richTextBox1.Height); 
Graphics g = Graphics.FromImage(bmp); 
g.CopyFromScreen(this.PointToScreen(richTextBox1.Location), new Point(0, 0), bmp.Size); 
bmp.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg); 
g.Dispose(); 
bmp.Dispose(); 
+0

Ce serait une solution, si je voudrais afficher l'image, mais je dois enregistrer l'image avec le texte dessus et faire beaucoup d'autres choses, comme générer des vignettes et montrez-le sur une page asp.net ... –

+0

J'ai ajouté comment faire ceci dans ma réponse. – Oceans

+0

Mais par conséquent, je dois afficher l'image. Mais je suis en train de traiter des centaines d'images et l'utilisateur ne devrait rien voir. –