2016-07-20 21 views
3

Ich möchte native gdi + -Methode aufrufen, um die Leistung des Textzeichens zu verbessern. Kann mir jemand Beispiel geben? Ich habe den folgenden Code aus der Referenzquelle gefunden. Ich möchte diese Methode in C# verwenden, um die Leistung zu verbessern. Wie kann ich das erreichen?So rufen Sie die GDipDrawString-Methode in C#

[DllImport(ExternDll.Gdiplus, SetLastError=true, ExactSpelling=true, 
    CharSet = System.Runtime.InteropServices.CharSet.Unicode)] // 3 = Unicode 
[ResourceExposure(ResourceScope.None)] 
internal static extern int GdipDrawString(HandleRef graphics, 
    string textString, int length, HandleRef font, 
    ref GPRECTF layoutRect, HandleRef stringFormat, HandleRef brush); 

Ich weiß nicht, wie für HandleRef Klasse-Objekt zu erstellen. Bitte schlage mir das vor?

Derzeit verwende ich folgenden Code, um die Zeichenfolge zu zeichnen.

Graphics.DrawString(text, font, brush, rect, format); 
+4

Ich werde wetten, dass es etwas anderes in Ihrem Code ist, dass die Dinge langsam macht. Teilen Sie diesen Code mit uns, um Hilfe zu erhalten. Graphics.DrawString ist wirklich nur zum Drucken nützlich, ansonsten verwenden Sie TextRenderer.DrawText. – LarsTech

+0

Bitte geben Sie einen Link an, wo Sie diese Beispiel-Deklaration erhalten haben, die uns hilft, Ihnen zu zeigen, wo HandleRef definiert ist. Außerdem stimme ich Lars zu, ich bezweifle, dass dies viel schneller machen wird. Zeigen Sie den Code, den Sie Graphics.DrawString aufrufen, gibt es wahrscheinlich schnellere Möglichkeiten, zu tun, was auch immer Sie versuchen zu tun –

+0

Ich habe GDI + native Win32-Code von der folgenden Verknüpfung http://referencesource.microsoft.com/#System.Drawing/commonui /System/Drawing/Advanced/Gdiplus.cs,15ca78ad12cd45eb, –

Antwort

0

Die einfachste Form der DrawString sieht wie folgt aus:

public void DrawString (string, Font, Brush, PointF); 

Wo Zeichenfolge ist der Text, den Sie zeichnen möchten, Schriftart und Pinsel sind die Schriftart und Bürsten verwendet, um den Text zu zeichnen, und PointF ist der Ausgangspunkt des Textes.

Zeichnung Text:

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) 
{ 
e.Graphics.DrawString("Hello GDI+ World!", 
new Font("Verdana", 16), 
new SolidBrush(Color.Red), 
new Point(20, 20)); 
} 

Dieses Buch weitere Informationen Graphics Programming with GDI+

1

A HandleRef bieten wird, ist im Wesentlichen ein IntPtr mit einem Griff und einem Verweis auf das Objekt der Griff gehört. Die Verwendung von HandleRef verhindert, dass der GC das Objekt sammelt, bis die native Methode damit ausgeführt wird.

Referenz Link: HandleRef