2009-11-23 2 views
7

앤티 앨리어싱을 사용하는 emf 메타 파일 (그리기 도구에서 내 보낸 양식)을 그리는 방법이 있습니까? 내가 시도한 도구는 emf 파일을 안티 앨리어싱하여 내보낼 수 없으므로 내 컨트롤의 OnPaint 재정의 EMF를 그릴 때 수동으로 되돌릴 수 있는지 궁금해했습니다.에코 안티 앨리어싱 그리기

누군가 기술적으로 앤티 엘리 어싱 된 emf 파일을 생성 할 수 있다고 확신 할 수 있다면 다른 해결책은 앤티 앨리어싱 된 emf로 내보내거나 타사 변환기에서 나중에 수행 할 수있는 그리기 도구를 사용하는 것입니다. 그러한 도구를 아는 사람이라면 알려 주시기 바랍니다.

편집 : emf instructions을 보면 emf 자체가 실제로 앤티 엘리 어싱 렌더링 여부에 관계없이 정보를 저장할 수있는 것처럼 보이지 않습니다. 적어도 나는 아무것도 찾을 수 없었다. 안티 앨리어싱이 재생 엔진에 의해 수행 될 가능성이 더 큽니다. 예를 들어, Word 2007에서 EMF를 열면 앤티 앨리어싱이 렌더링됩니다. 하지만 GDI + "재생 엔진"(Graphics.DrawImage(...))으로 그릴 때가 아닙니다. 또는 표준 Windows 이미지 뷰어를 볼 때. 일부 도구에는 실제로 자체 EMF 재생 엔진이 있다고 생각합니다. 어쩌면 무료 .NET 라이브러리 (가급적이면 소스 코드가 있음)가 파싱 된 emf 파일에 저장된 emf 명령어의 객체 모델을 제공하여 Graphics.DrawImage(...) 대신 직접 재생할 수 있습니까?

+2

그 밖의 모든 것이 실패하면 아마도 크기의 4 배로 그려서 다운 샘플링 할 수 있습니다. – Joey

+0

나는 이것을 시도했다. 작은 크기에서도 여전히 못 생겼다.이 접근법을 사용하면 아마도 추악한 메모리 오버 헤드가 생길 수있다. (나는 한 번에 그러한 UserControls 많이 표시됩니다). – bitbonk

+0

중복 : http://stackoverflow.com/questions/1422949/emf-with-forced-antialiasing – liori

답변

9

우리는 DirectX 프로젝트에서 비슷한 문제가있었습니다. 업 스케일링 및 다운 스케일링은 어느 정도 작동하지만, 가짜입니다. 반복해서해야 할 일이라면 WMF의 레코드를 구문 분석하여 GDI + 앤티 앨리어스로 그릴 수 있습니다.

http://www.dotnet247.com/247reference/msgs/28/144605.aspx

http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-sdk/1127/Graphics-DrawImage-metafile-no-antialiasing

[편집 :]

이 세 가지 프로그램 다시이 최대 (그러나 그들은 2005 년부터 지금 상황이 변경되었을 수있어)

다음 스레드이 당신에게 도움이 될지 모르겠다. 나는 당신이 그것을 손으로하는 것으로 괜찮다고 가정한다 :

,210

http://emf-to-vector-converter-command-line-ser.smartcode.com/info.html

http://www.verypdf.com/pdf-editor/index.html

http://www.ivanview.com/converter/emf-batch-converter.html

[편집 II는 :] :

http://download.cnet.com/windows/3055-2383_4-10558240.html?tag=pdl-redir

음, 여기에 다양한 방법의 EMF를 검사 할 수 있도록하는 프로그램입니다

... 여기 프리웨어가 있습니다. 라이브러리를 사용하면 EMF 명령 중 122 개를 구문 분석하고 GDI +에서 출력 할 수 있습니다. 오 ...

http://www.codeproject.com/KB/GDI-plus/emfexplorer.aspx?msg=2359423

, 예고도 CodeProject의 페이지에 # 3 코멘트 : 그건 아마도 트릭을 할해야합니다. 누군가 벽에 머리를 쾅 댔던 것처럼 보입니다. 희망이 당신의 문제를 해결합니다.

+0

그 프로그램은 다른 파일 형식으로 변환하는 것 같습니다. 이것이 GDI +가 처리 할 수있는 유일한 벡터 포맷이기 때문에 벡터 아트를 표시하기 위해 EMF를 선택했습니다. 런타임에서 동적으로 수정하고 애니메이션을 적용하기 때문에 코드 (따라서 GDI +)에서 아트를 그릴 필요가 있습니다. 또한 GDI +를 사용하여 emf를 표시하는 것이 벡터 아트를 표시하는 데 가장 CPU 및 메모리 친화적 인 방법입니다. emf가 도움이되지 않는 다른 형식을 사용합니다. 멋진 솔루션은 C# GDI + instrructions 변환기에 Vectorgrafik (모든 형식)을 사용하는 것입니다. – bitbonk

+0

그런 경우, 유지 모드 그리기 시스템을 사용하고 EMF를 모두 생략하지 않는 이유는 무엇입니까? 이론적으로 EMF 이미지를 저장하고 사용자 지정 라이브러리를 사용하여 각 도형을 추출하고 GDI (+)로 다시 그릴 수 있습니다. 그러나 문제에 대한 설명에서 객체를 사용하여 이미지를 설명하는 독점 형식을 만든 다음 문제의 표면으로 렌더링합니다. 다른 접근 방식은 swf를 사용할 수 있습니다. swf는 훨씬 더 잘 지원되고 문서화가 잘되어 있으며 IMO는 더욱 다양합니다. – Pedery

+0

우리는 일반적인 드로잉 소프트웨어 (일러스트 레이터, inkscape, coreldraw ... 중 하나)로 예술을 그려야하기 때문에 propietary 포맷을 사용할 수 없습니다. – bitbonk

4

EMF는 GDI +가 아닌 GDI 명령을 사용하기 때문에 앤티 앨리어싱 개념이 없습니다. 파일을 렌더링하기 위해 GDI +를 요청하면 GDI로 보내고 결과 비트 맵을 복사합니다.

코드에서이 코드를 복제하는 것은 GDI를 다시 구현하는 것과 동일하므로 매우 적절하지는 않습니다. 불가능하지 않고, 이익보다 큰 직업 만이 정당화 될 것입니다. Windows 외부에서 EMF 파일을 열 수있는 오픈 소스 유틸리티가있는 경우 소스 코드를 살펴볼 수 있습니다.

내 생각 엔 Word가 다운 샘플링 트릭을 사용하고있는 것 같습니다.

3

EMF 파일은 GDI 명령의 목록입니다. 따라서 GDI +에서 드로잉 이전에 SmoothingMode() 호출을하더라도 앤티 앨리어스가 적용되지 않습니다. GDI 명령을 열거하고 GDI + 명령으로 변환해야합니다.

Vista/Seven에서는 GdipConvertToEmfPlus/ConvertToEmfPlus라는 GDI + 1.1 기능을 사용할 수 있습니다. 프로그램이 XP에서 작동하게하려면 직접 열거 형을 작성한 다음 GDI + 명령으로 변환해야합니다.

GDI 열거 형 변환은 GDI +로 가능하며 emfexplorer으로 끝났지 만 델파이로 작성된 경우에도 some code perhaps more easy to follow으로 작성했습니다.

ConvertToEmfPlus를 사용하여 솔루션을 찾아 내고이 방법을 사용할 수없는 경우에 대비하여 튜닝 된 오픈 소스 코드를 작성하는 데 많은 시간을 투자했기 때문에 지금은이 답변을 올리고 있습니다 (늦었습니다).