방법: UML 다이어그램을 이미지 파일로 내보내기
Visual Studio에서 프로그램 제어가 적용되는 이미지로 UML 문서를 내보낼 수 있습니다. 예를 들어 자동 문서 생성의 일부로 이 작업을 수행할 수 있습니다.
문서를 이미지로 직접 내보내려면 다이어그램에서 Word 등의 다른 프로그램으로 도형을 복사하여 붙여넣습니다. 문서를 XPS 형식으로 인쇄할 수도 있습니다. 자세한 내용은 방법: 다이어그램 이미지 내보내기을 참조하십시오.
이미지 저장
다음은 파일에 이미지를 저장하는 바로 가기 메뉴 명령(상황에 맞는 메뉴 명령이라고도 함)을 정의하는 코드입니다.
참고
이 코드가 메뉴 명령으로 작동하도록 하려면 MEF 구성 요소에 코드를 병합해야 합니다. 자세한 내용은 방법: 모델링 다이어그램의 메뉴 명령 정의을 참조하십시오.
코드에서는 먼저 [M:Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation.IDiagram.GetObject`1()]을 사용하여 기본 구현의 Diagram을 가져옵니다. 이 형식에는 메서드 CreateBitmap()이 있습니다.
namespace SaveToImage
{
using System.ComponentModel.Composition;
// for [Import], [Export]
using System.Drawing; // for Bitmap
using System.Drawing.Imaging; // for ImageFormat
using System.Linq; // for collection extensions
using System.Windows.Forms; // for SaveFileDialog
using Microsoft.VisualStudio.Modeling.Diagrams;
// for Diagram
using Microsoft.VisualStudio.Modeling.ExtensionEnablement;
// for IGestureExtension, ICommandExtension, ILinkedUndoContext
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation;
// for IDiagramContext
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
// for designer extension attributes
/// <summary>
/// Called when the user clicks the menu item.
/// </summary>
// Context menu command applicable to any UML diagram
[Export(typeof(ICommandExtension))]
[ClassDesignerExtension]
[UseCaseDesignerExtension]
[SequenceDesignerExtension]
[ComponentDesignerExtension]
[ActivityDesignerExtension]
class CommandExtension : ICommandExtension
{
[Import]
IDiagramContext Context { get; set; }
public void Execute(IMenuCommand command)
{
// Get the diagram of the underlying implementation.
Diagram dslDiagram = Context.CurrentDiagram.GetObject<Diagram>();
if (dslDiagram != null)
{
string imageFileName = FileNameFromUser();
if (!string.IsNullOrEmpty(imageFileName))
{
Bitmap bitmap = dslDiagram.CreateBitmap(
dslDiagram.NestedChildShapes,
Diagram.CreateBitmapPreference.FavorClarityOverSmallSize);
bitmap.Save(imageFileName, GetImageType(imageFileName));
}
}
}
/// <summary>
/// Called when the user right-clicks the diagram.
/// Set Enabled and Visible to specify the menu item status.
/// </summary>
/// <param name="command"></param>
public void QueryStatus(IMenuCommand command)
{
command.Enabled = Context.CurrentDiagram != null
&& Context.CurrentDiagram.ChildShapes.Count() > 0;
}
/// <summary>
/// Menu text.
/// </summary>
public string Text
{
get { return "Save To Image..."; }
}
/// <summary>
/// Ask the user for the path of an image file.
/// </summary>
/// <returns>image file path, or null</returns>
private string FileNameFromUser()
{
SaveFileDialog dialog = new SaveFileDialog();
dialog.AddExtension = true;
dialog.DefaultExt = "image.bmp";
dialog.Filter = "Bitmap ( *.bmp )|*.bmp|JPEG File ( *.jpg )|*.jpg|Enhanced Metafile (*.emf )|*.emf|Portable Network Graphic ( *.png )|*.png";
dialog.FilterIndex = 1;
dialog.Title = "Save Diagram to Image";
return dialog.ShowDialog() == DialogResult.OK ? dialog.FileName : null;
}
/// <summary>
/// Return the appropriate image type for a file extension.
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
private ImageFormat GetImageType(string fileName)
{
string extension = System.IO.Path.GetExtension(fileName).ToLowerInvariant();
ImageFormat result = ImageFormat.Bmp;
switch (extension)
{
case ".jpg":
result = ImageFormat.Jpeg;
break;
case ".emf":
result = ImageFormat.Emf;
break;
case ".png":
result = ImageFormat.Png;
break;
}
return result;
}
}
}