2009-10-20 2 views
4

GDI +를 사용하여 그래픽 경로를 어떻게 개요합니까? 예를 들어 GraphicsPath에 두 개의 직사각형을 추가합니다. 이 결과 그래픽 경로의 윤곽 만 그려보고 싶습니다..Net에서 GDI +를 사용하는 경로 개요

영역을 채우기를 원하지 않는다는 것을 유의하십시오. 윤곽을 그려야합니다.

예 : http://i.stack.imgur.com/IAVft.png

답변

8

이 윤곽을 수행 할 관리 방법은 없습니다, 솔루션을 게시하시기 바랍니다. 그러나 GDI +에는 GdipWindingModeOutline이라는 함수가 있으며이 함수는 정확하게이 작업을 수행 할 수 있습니다.

// Declaration required for interop 
[DllImport(@"gdiplus.dll")] 
public static extern int GdipWindingModeOutline(HandleRef path, IntPtr matrix, float flatness); 

void someControl_Paint(object sender, PaintEventArgs e) 
{ 
    // Create a path and add some rectangles to it 
    GraphicsPath path = new GraphicsPath(); 
    path.AddRectangles(rectangles.ToArray()); 

    // Create a handle that the unmanaged code requires. nativePath private unfortunately 
    HandleRef handle = new HandleRef(path, (IntPtr)path.GetType().GetField("nativePath", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(path)); 
    // Change path so it only contains the outline 
    GdipWindingModeOutline(handle, IntPtr.Zero, 0.25F); 
    using (Pen outlinePen = new Pen(Color.FromArgb(255, Color.Red), 2)) 
    { 
     g.DrawPath(outlinePen, path); 
    } 
} 
: Here is the MSDN reference 이 코드는 트릭을 수행
0

나는 그것을 자신을 시도 할 수는 없지만, 난 당신이 FrameRgn API를 사용하여 다음 모양 '교차로와 지역 객체를 생성한다고 생각합니다.
여기의 pinvoke signature입니다 :

[DllImport("gdi32.dll")] 
static extern bool FrameRgn(
    IntPtr hdc, 
    IntPtr hrgn, 
    IntPtr hbr, 
    int nWidth, 
    int nHeight); 

P.S이 작동하는지 궁금 해요 :)

관련 문제