GDI +를 사용하여 그래픽 경로를 어떻게 개요합니까? 예를 들어 GraphicsPath에 두 개의 직사각형을 추가합니다. 이 결과 그래픽 경로의 윤곽 만 그려보고 싶습니다..Net에서 GDI +를 사용하는 경로 개요
영역을 채우기를 원하지 않는다는 것을 유의하십시오. 윤곽을 그려야합니다.
예 :
GDI +를 사용하여 그래픽 경로를 어떻게 개요합니까? 예를 들어 GraphicsPath에 두 개의 직사각형을 추가합니다. 이 결과 그래픽 경로의 윤곽 만 그려보고 싶습니다..Net에서 GDI +를 사용하는 경로 개요
영역을 채우기를 원하지 않는다는 것을 유의하십시오. 윤곽을 그려야합니다.
예 :
이 윤곽을 수행 할 관리 방법은 없습니다, 솔루션을 게시하시기 바랍니다. 그러나 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 이 코드는 트릭을 수행
나는 그것을 자신을 시도 할 수는 없지만, 난 당신이 FrameRgn API를 사용하여 다음 모양 '교차로와 지역 객체를 생성한다고 생각합니다.
여기의 pinvoke signature입니다 :
[DllImport("gdi32.dll")]
static extern bool FrameRgn(
IntPtr hdc,
IntPtr hrgn,
IntPtr hbr,
int nWidth,
int nHeight);
P.S이 작동하는지 궁금 해요 :)