2010-11-17 22 views
12

Mam następujący kod. Czy istnieje prosty sposób na zarysu tekstu, który piszę?Zarys tekstu za pomocą System.Drawing?

var imageEncoder = Encoder.Quality; 
var imageEncoderParameters = new EncoderParameters(1); 
imageEncoderParameters.Param[0] = new EncoderParameter(imageEncoder, 100L); 

var productImage = GetImageFromByteArray(myViewModel.ProductImage.DatabaseFile.FileContents); 
var graphics = Graphics.FromImage(productImage); 

var font = new Font("Segoe Script", 24); 
var brush = Brushes.Orange; 

var container = new Rectangle(myViewModel.ContainerX, myViewModel.ContainerY,          myViewModel.ContainerWidth,            myViewModel.ContainerHeight); 

var stringFormat = new StringFormat {Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center}; 

graphics.DrawString(customizationText, font, brush, container, stringFormat); 

Odpowiedz

23

Tak. Zamiast sznurkiem, stosuje się następującą sekwencję wywołań:

Jeśli trzeba użyć GraphicsPath.AddString obok Graphics.DrawString, trzeba konwertować rozmiary czcionek, becau se Graphics.DrawString oczekuje "rozmiaru punktu", podczas gdy GraphicsPath.AddString oczekuje "rozmiaru em". Formuła konwersji to po prostu emSize = g.DpiY * pointSize/72.

Oto przykładowy kod:

// assuming g is the Graphics object on which you want to draw the text 
GraphicsPath p = new GraphicsPath(); 
p.AddString(
    "My Text String",    // text to draw 
    FontFamily.GenericSansSerif, // or any other font family 
    (int) FontStyle.Regular,  // font style (bold, italic, etc.) 
    g.DpiY * fontSize/72,  // em size 
    new Point(0, 0),    // location where to draw text 
    new StringFormat());   // set options here (e.g. center alignment) 
g.DrawPath(Pens.Black, p); 
// + g.FillPath if you want it filled as well 
+0

Dzięki za odpowiedź, ale nie wydaje się uzyskać to do pracy. Nie jestem pewien, które przeciążenia należy użyć dla tych metod. Czy jedyną linią, którą wyjmowałbym z obecnego programu, byłaby linia graphics.DrawString()? –

+0

[Tak.] (Http://meta.stackexchange.com/questions/700/) – Timwi

+0

Dzięki za te informacje, zrobiłem dokładnie to, co powiedziałeś ... Ale oczywiście zdałem sobie sprawę, że nie ma anty-aliasingu tak tekst wygląda dość okropnie. :(Nie jestem jeszcze pewien, co z tym zrobić: –

Powiązane problemy