Windows 글꼴을 사용하여 텍스트 윤곽선의 각 정점 위치를 얻는 방법이 있습니까?Windows에서 텍스트의 다각형 윤곽선의 정점 위치 가져 오기
텍스트와 글꼴을 보내는 알고리즘이 필요하며 텍스트의 각 문자의 정점 좌표를 얻습니다.
Windows 글꼴을 사용하여 텍스트 윤곽선의 각 정점 위치를 얻는 방법이 있습니까?Windows에서 텍스트의 다각형 윤곽선의 정점 위치 가져 오기
텍스트와 글꼴을 보내는 알고리즘이 필요하며 텍스트의 각 문자의 정점 좌표를 얻습니다.
http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/f50d43fe-8206-40e5-98da-6c60630b5f73의 답변이 필요한지는 잘 모르겠지만 한 번만 알려주세요.
이public struct GLYPHMETRICS
{
public uint gmBlackBoxX;
public uint gmBlackBoxY;
public Point gmptGlyphOrigin;
public short gmCellIncX;
public short gmCellIncY;
}
public struct FIXED
{
public ushort fract;
public short value;
}
public struct MAT2
{
public FIXED eM11;
public FIXED eM12;
public FIXED eM21;
public FIXED eM22;
}
[DllImport("gdi32.dll")]
static extern uint GetGlyphOutline(IntPtr hdc, uint uChar, uint uFormat,
out GLYPHMETRICS lpgm, uint cbBuffer, IntPtr lpvBuffer, ref MAT2 lpmat2);
public static bool GetGlyphShape(Font font, Char c, out GLYPHMETRICS metrics)
{
metrics = new GLYPHMETRICS();
MAT2 matrix = new MAT2();
matrix.eM11.value = 1;
matrix.eM12.value = 0;
matrix.eM21.value = 0;
matrix.eM22.value = 1;
using (Bitmap b = new Bitmap(1, 1))
{
using (Graphics g = Graphics.FromImage(b))
{
IntPtr hdc = g.GetHdc();
IntPtr prev = SelectObject(hdc, font.ToHfont());
int bufferSize = (int)GetGlyphOutline(
hdc, (uint)c, (uint)2, out metrics, 0,
IntPtr.Zero, ref matrix);
IntPtr buffer = Marshal.AllocHGlobal(bufferSize);
bool retval = false;
try
{
retval = GetGlyphOutline(hdc, (uint)c, (uint)2,
out metrics, (uint)bufferSize,
buffer, ref matrix) > 0;
g.ReleaseHdc(hdc);
}
catch { retval = false; }
finally
{
Marshal.FreeHGlobal(buffer);
}
return retval;
}
}
}
U이에 대한 어떤 3D 모델링 소프트웨어를 사용할 수 있습니다
나는 당신의 문제를 해결할 수있는 코드의 일부를 게시 할 수 있습니다. 예를 들어, 블렌더는 텍스트 객체를 생성하고 간단한 메모장에서 열 수있는 obj 형식 파일을 내보내기위한 좋은 지원을합니다. 여기서 필요한 문자의 모든 정점을 검색 할 수 있습니다.
그러나 반면에 정점이 많이있을 것입니다. 따라서 모든 글꼴을로드하는 데 많은 시간이 걸릴 것입니다. – anurag
어떤 언어를 사용하고 있습니까? C#에서는 모든 문자와 함께'Graphics.MeasureString'을 사용하려고 시도 할 수 있습니다. 그러나 문자 사이에 "빈"픽셀을 계산하는 방법을 상상할 수는 없습니다 ... – Marco
@Marco, 모든 언어를 환영합니다. 관심있는 부분은 Windows API 함수 또는 글꼴 정보를 읽는 .NET Framework 메서드입니다. MeasureString은 텍스트가 화면에서 차지할 영역을 반환합니다. 필요한 것은 소개하는 텍스트의 각 문자의 정점 좌표입니다. – Michelle
GDI 경로를 사용할 수 있습니다. 'BeginPath' +'TextOut' +'EndPath'를 호출하여 텍스트 외곽선으로부터 경로를 만듭니다. 그런 다음'GetPath'를 사용하여 경로 좌표를 읽으십시오. 선택적으로 'FlattenPath'를 호출하여 곡선을 직선으로 변환 할 수 있습니다. –