PostScript でのテクスチャ操作 | .NET
PSドキュメントにテクスチャタイリングパターンを追加する
テクスチャタイリングパターンは、図形やテキストなどのオブジェクトの塗りつぶしや描画に使用される画像です。画像のサイズがオブジェクトのサイズより小さい場合は、必要な領域をすべて覆うためにX方向とY方向に画像が繰り返されます。
グラフィックオブジェクト内で画像を繰り返す処理はタイリングと呼ばれます。 PsDocumentでペイントやストロークを設定するには、ペイントの場合はSystem.Drawing.Brushクラスのオブジェクト、ストロークの場合はSystem.Drawing.Penクラスのオブジェクトをそれぞれのメソッドに渡す必要があります。
Aspose.Page for .NET ライブラリは、.NET プラットフォームで提供される System.Drawing.Brush のすべてのサブクラスを処理します。これらのサブクラスは、System.Drawing.SolidBrush、System.Drawing.TextureBrush、System.Drawing.LinearGradientBrush、System.Drawing.PathGradientBrush、および System.Drawing.HatchBrush です。System.Drawing.Pen クラスはシールされているため拡張できませんが、System.Drawing.Brush をプロパティとして含んでいるため、Aspose.Page for .NET ライブラリでは、直線の描画や図形およびテキストのアウトラインにも使用できる完全なブラシ セットを使用できます。
Aspose.Page for .NET ライブラリでグラフィック オブジェクトをテクスチャ パターンで 描画 するには、System.Drawing.TextureBrush を SetPaint() または FillText() や FillAndStrokeText() メソッド (いずれも System.Drawing.Brush をパラメーターとして受け取ります) に渡すだけです。
Aspose.Page for .NET ライブラリでグラフィック オブジェクトをテクスチャ パターンで アウトライン するには、System.Drawing.TextureBrush を含む新しい System.Drawing.Pen を作成し、それを SetStroke() または OutlineText() や FillAndStrokeText() メソッド (いずれも System.Drawing.Pen をパラメーターとして受け取ります) に渡す必要があります。
以下の例では、テクスチャ タイリング パターンを使用して図形とテキストを塗りつぶし、テキストのアウトラインを描く方法を示します。
例におけるテクスチャパターンと PsDocument の操作手順の説明:
- 生成される PS ファイルの出力ストリームを作成します。
- デフォルトのオプションで PsSaveOptions オブジェクトを作成します。
- 既に作成済みの出力ストリームと保存オプションを使用して、1 ページの PsDocument を作成します。
- 新しいグラフィックス状態を作成し、必要な位置に移動します。
- 画像ファイルから System.Drawing.Bitmap を作成します。
- 画像から System.Drawing.TextureBrush を作成します。
- テクスチャブラシに必要な変換を設定します。
- PsDocument の現在のグラフィックス状態で、テクスチャブラシを現在のペイントとして設定します。
- 長方形のパスを作成します。
- テクスチャブラシで長方形を塗りつぶします。
- 現在のペイントを将来使用するためにローカル変数に保存します。
- 赤いペンで現在のストロークを設定します。
- 現在のペンで長方形のアウトラインを描画します。
- 現在のグラフィック状態から上位レベルのグラフィック状態に移行します。
- システム フォントを作成します。
- テキストを塗りつぶし、ストローク(アウトライン)します。塗りつぶしにはテクスチャブラシを使用し、ストロークには黒のペンを使用します。
- テクスチャブラシをブラシとして作成した新しい System.Drawing.Pen を使用して、他の位置のテキストのアウトラインを描画します。
- ページを閉じます。
- ドキュメントを保存します。
1 //Create an output stream for PostScript document
2using (Stream outPsStream = new FileStream(dataDir + "AddTextureTilingPattern_outPS.ps", FileMode.Create))
3{
4 //Create save options with A4 size
5 PsSaveOptions options = new PsSaveOptions();
6
7 // Create new 1-paged PS Document
8 PsDocument document = new PsDocument(outPsStream, options, false);
9
10
11 document.WriteGraphicsSave();
12 document.Translate(200, 100);
13
14 //Create a Bitmap object from image file
15 using (Bitmap image = new Bitmap(dataDir + "TestTexture.bmp"))
16 {
17 //Create texture brush from the image
18 TextureBrush brush = new TextureBrush(image, WrapMode.Tile);
19
20 //Add scaling in X direction to the mattern
21 Matrix transform = new Matrix(2, 0, 0, 1, 0, 0);
22 brush.Transform = transform;
23
24 //Set this texture brush as current paint
25 document.SetPaint(brush);
26 }
27
28 //Create a rectangle path
29 GraphicsPath path = new GraphicsPath();
30 path.AddRectangle(new RectangleF(0, 0, 200, 100));
31
32 //Fill the rectangle
33 document.Fill(path);
34
35 //Get current paint
36 Brush paint = document.GetPaint();
37
38 //Set red stroke
39 document.SetStroke(new Pen(new SolidBrush(Color.Red), 2));
40 //Stroke the rectangle
41 document.Draw(path);
42
43 document.WriteGraphicsRestore();
44
45 //Fill the text with the texture pattern
46 Font font = new Font("Arial", 96, FontStyle.Bold);
47 document.FillAndStrokeText("ABC", font, 200, 300, paint, new Pen(Color.Black, 2));
48
49 //Outline the text with the texture pattern
50 document.OutlineText("ABC", font, 200, 400, new Pen(paint, 5));
51
52 //Close current page
53 document.ClosePage();
54
55 //Save the document
56 document.Save();
57}
Linux、macOS、その他のWindows以外のオペレーティングシステムでは、 Aspose.Page.Drawing NuGetパッケージをご利用いただけます。このパッケージは、System.Drawingシステムライブラリではなく、Aspose.Drawingバックエンドを使用します。
そのため、System.Drawing名前空間ではなく、Aspose.Page.Drawing名前空間をインポートしてください。上記のコードスニペットでは、System.Drawing.RectangleFではなくAspose.Page.Drawing.RectangleFが、System.Drawing.Drawing2D.GraphicsPathではなくAspose.Page.Drawing.Drawing2D.GraphicsPathが使用されるなど、必要な置換はすべてGitHubのコード例に記載されています。
Java の PS ドキュメントでのテクスチャの操作を参照してください。
このコードを実行した結果は次のように表示されます。
サンプルとデータ ファイルは GitHub からダウンロードできます。