나는 MetaFile (emf)에서 이미지를 그린 다음 UserControl의 OnPaint 내에서 회전 변환을 적용합니다. 이러한 변환을 적용한 후 어떻게 화면 좌표에서 일반 untransformed 사각형 경계 상자를 계산할 수 있습니까? 회전 된 이미지의 크기를 UserControl의 크기로 조정하려면이 기능이 필요합니다.GDI + 그림의 테두리 상자를 계산하십시오.
protected override void OnPaint(PaintEventArgs e)
{
// rotate around the center of this UserControl
e.Graphics.TranslateTransform(this.Width/2.0f, this.Height/2.0f);
e.Graphics.RotateTransform(this.Rotation);
e.Graphics.TranslateTransform(this.Width/-2.0f, this.Height/-2.0f);
// TODO: now scale so the image so it fits exactly into this UserControl
// draw the image at the center of this UserControl
float left = (this.Width - ResourceManager.MyDrawingMetaFile.Width)/2.0f;
float top = (this.Height - ResourceManager.MyDrawingMetaFile.Height)/2.0f;
e.Graphics.DrawImage(Resources.MyDrawingMetaFile, left, top);
}
이 뒤에 전체 아이디어는 내가 UserControl을에서 파일 .EMF 회전 표시 할과 기전력이있는 UserControl에서 사용 가능한 공간을 채우기에 allways 그리기 가지고있다. 어쩌면 더 나은 접근법이 있을까요?
필자가 작성한 fillmode/stretchmode는 Uniform 및 UniformToFill입니다 (WPF의 Viewbox와 같습니다). emf가 왜곡되어서는 안됩니다. Uniform 모드에서는 emf가 최소한 하나의 차원에서 사용자 정의 컨트롤을 완전히 채우고 아무것도 자릅니다. UniformToFill에서는 emf가 두 차원 모두에서 UserControl을 채우고, aspectratio가 일치하지 않으면 emf가 한 차원에서 잘립니다.
"채우기"를 어떻게 원하십니까? emf가 사용자 컨트롤을 완전히 덮어야합니까 (emf의 일부분이 잘려야하는지) 아니면 emf가 모두 보이도록 크기를 조정해야합니까? emf가 원본 가로 세로 비율을 유지해야합니까? –
필자가 작성한 fillmode/stretchmode는 Uniform 및 UniformToFill입니다 (WPF의 Viewbox와 같습니다). emf가 왜곡되어서는 안됩니다. Uniform 모드에서는 emf가 최소한 하나의 차원에서 사용자 정의 컨트롤을 완전히 채우고 아무것도 자릅니다. UniformToFill에서는 emf가 두 차원 모두에서 UserControl을 채우고, aspectratio가 일치하지 않으면 emf가 한 차원에서 잘립니다. – bitbonk