LEADTOOLS Leadtools.Topics.Svg

フレームを表示

LEADTOOLSでSVGドキュメントを処理するための主要なクラスは、Leadtools.Svg.SvgDocumentクラスです。

サイズ、境界とフラット

SVG(Scalable Vector Graphics)形式ドキュメントにはサイズがある場合とない場合があります。ドキュメントがサイズを持っているならば、それは保存されますwidth、そして、height要素をルートsvgのものと考えて、そして、任意の座標系であることができます。SVGレンダラーは、ドキュメントの最終的なバウンディング四角形を決定するために、通常この値を使います。省略されるならば、それは外部的に供給される(たとえば、SVGの親コンテナを用いて)ことをこの情報に要求します。1計測単位は、物理的なピクセルにすべての座標系を変換するためにも必要です。これは、ドキュメントのビューポートと呼ばれています。

SVGドキュメントは、要素の階層を格納します。最終的な変換(positionとサイズなどの)とスタイル(カラーと塗りつぶしなどの)は、階層の中に親の変換とスタイルに依存することができます。表示するためにデバイスにドキュメントを出力するとき、SVGレンダラーは計算しなければならなくて、この情報の経過を追わなければなりません。この手続きは、LEADTOOLSではドキュメントのフラット化と定義されます。変換/スタイルを子要素で適用しておかないドキュメントは、LEADTOOLSによる非フラットなドキュメントと定義されます。変換/スタイルを子要素に適用しておくドキュメントは、LEADTOOLSによるフラットなドキュメントと定義されます。

SVGにドキュメントを与えるために、以下の手順は、通常実行されます:

SvgDocumentサポート

Leadtools.Svg.SvgDocumentクラスは、SVG(サイズの有無にかかわらず、フラットであるか、非フラットな)の任意型を処理することができます。しかし、ドキュメントを提出するか、最終的な要素位置とサイズを抽出するために、任意のなくなった情報は、どちらでも自動的に計算されるか、ユーザーによって供給されるということでなければなりません。

適所に、フラットなものに非フラットなドキュメントを変換するために、SvgDocument.Flatメソッドを使います。このメソッドは、ピクセル単位でドキュメントの最終的な目的のサイズを格納することができるSvgFlatOptionsパラメーターを受け取ります。このパラメーターが省略される、または、サイズの値が0であるならば、SvgDocumentは自動的に最終的なサイズを計算してみます。このメソッドが返るとき、変換とスタイル値は各々の子要素に適用されます。ソースを修正することなくターゲットドキュメントの上で平坦化を実行するために、SvgDocument.ToFlatを使います。

ドキュメントがフラットかどうか決定するために、SvgDocument.IsFlatプロパティを呼び出します。SvgDocument.Flatが以前にドキュメントの上で呼び出されなかったならば、内部状態としてのこれはクラスによって保存して、falseであるでしょう。SvgDocument.SetFlatメソッドは、設定するか、手動で必要であればこのフラグの状態をリセットするのに用いられることができます。

フラットなSVGドキュメントのサイズと最終的なビューポートは、SvgDocument.CalculateBoundsメソッドを用いて計算されることができます。このメソッドは、ピクセル単位で最終的なサイズを計算する各々の要素とドキュメントの解像度の物理的なposition、サイズと変換をプラスして現在のサイズ情報(利用できるならば)を使います。このメソッドは、SvgDocument.Boundsプロパティで値を保存します。

SvgDocument.CalculateBoundsは、利用できる(非で装飾された)ならば、現在のサイズ情報(利用できるならば)を無視するべきで、全く子要素のpositionとサイズ(トリムされる)を使うべきであるか、サイズを使うべきかどうかについて制御するブール値を受け取ります。ドキュメントがフラットでないならば、SvgDocument.CalculateBoundsは失敗します。

SvgDocument.Boundsは、型SvgBoundsです。ドキュメントのサイズが計算されたかどうか決定するために、SvgBounds.IsValidプロパティを使います。SvgDocument.CalculateBoundsが以前にドキュメントの上で呼び出されなかったならば、これはこのクラスによって保存される内部状態で、falseであるでしょう。それぞれ、SvgBounds.BoundsSvgBounds.ResolutionはドキュメントのDPIで、ピクセルと解像度で物理的なバウンディング四角形を格納します。SvgDocument.SetBoundsメソッドは、設定するか、必要であれば手動で境界をリセットするのに用いられることができます。

SvgDocument.LoadFromFileSvgDocument.LoadFromStreamまたはSvgDocument.LoadFromMemoryを用いて直接SVGドキュメントをロードするとき、平坦化またはサイズ計算は起こりません。ドキュメントは、現状のままロードされます。

どんなドキュメントまたはベクトルからでもSVGにページを変換するためにRasterCodecs.LoadSvgまたはDocumentsPage.GetSvgを使うとき、結果として生じるドキュメントはサイズ、境界またはフラットな情報を格納するかもしれないか、格納しないかもしれません。

SvgDocument.Renderは、ターゲットデバイスにSVGにドキュメントを与えるのに用いられます。このメソッドは、有効な境界でフラットなドキュメントを必要とします。詳細については、「SVGのレンダリング」を参照してください。

以下のcodeは、そのフラットと境界状態を自動的に確認することによってドキュメントを提出する方法を例示します:

             void RenderDocument(IRenderingEngine engine, SvgRenderOptions options, SvgDocument svgDocument)
             {
                // If the document is not flat, flatten it and automatically calculate its size
                if (!svgDocument.IsFlat)
                   svgDocument.Flat(null);
            
                // If the document does not have valid bounds, calculate it now automatically
                var svgBounds = svgDocument.Bounds;
                if (!svgBounds.IsValid)
                   svgDocument.CalculateBounds(false);
            
                // Now, render the document
                svgDocument.Render(engine, options);
             }
             

上で(たとえば、ImageViewerItem.SvgDocumentまたはSVG ImageViewerItem.Url.を用いて画像ビューワ(ImageViewer)で、SVGドキュメントを設定する)例示されるように、LEADTOOLSの一部はSVG境界の平坦化と計算を自動的に実行します

SVGの操作
SVGのレンダリング