2016-07-20 12 views
3

Я хочу вызвать собственный метод gdi + для улучшения производительности текстового чертежа. Может ли кто-нибудь представить пример? Я нашел следующий код из исходного источника. Я хочу использовать этот метод в C# для повышения производительности. Как я могу достичь этого?Как вызвать метод GDipDrawString в 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); 

Я не знаю, как создать объект для HandleRef класса. Пожалуйста, предложите мне это?

В настоящее время я использую следующий код, чтобы нарисовать строку.

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

Держу пари, что есть что-то еще в вашем коде, который делает вещи медленно. Поделитесь этим кодом с нами, чтобы получить справку. Graphics.DrawString действительно полезен только для печати, в противном случае используйте TextRenderer.DrawText. – LarsTech

+0

Просьба указать ссылку на то, где у вас есть пример склонения, который поможет нам показать вам, где определен HandleRef. Кроме того, я согласен с Ларсом, я сомневаюсь, что это сделает его намного быстрее. Покажите код, который вы вызываете Graphics.DrawString, есть, вероятно, более быстрые способы делать то, что вы пытаетесь сделать. –

+0

У меня есть собственный код win32 GDI + из следующей ссылки http://referencesource.microsoft.com/#System.Drawing/commonui /System/Drawing/Advanced/Gdiplus.cs,15ca78ad12cd45eb, –

ответ

0

Простейшая форма DrawString выглядит следующим образом:

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

Где строка является текстом, который вы хотите рисовать, шрифт и кисть шрифт и кисть, используемая для рисования текста и PointF является отправной точкой текста.

Рисунок Текст:

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)); 
} 

Эта книга предоставит подробнее Graphics Programming with GDI+

1

A HandleRef является по существу IntPtr к ручке и ссылка на объект ручка принадлежит. Использование HandleRef не позволяет GC собирать объект до тех пор, пока с ним не будет выполнен нативный метод.

Ссылка ссылка: HandleRef