グラデーショングリッド透明度XPSを追加

XPSファイルは、多くの視覚情報を表示するために使用できます。これらは、テキスト、画像、オブジェクトの透明度、グリッド、グラデーション、およびその他の多くの機能をサポートしています。要件に応じて、グラデーション、グリッド、および透明オブジェクトをXPSファイルに挿入できます。この記事では、さまざまな例と使用例とともに、これらの機能について詳しく説明します。次のトピックを見ていきましょう。

XPS API for C++のインストール

XPS、PS、EPS、およびその他のサポートされているファイル形式を操作するために、プログラミングアプリケーションでAspose.Page for C++ APIをすばやく簡単に構成できます。公式のダウンロードからDLLファイルをダウンロードするか、次のコマンドを使用してNuGetギャラリーからインストールします。

PM> Install-Package Aspose.Page.Cpp 

C++を使用してXPSファイルにグラデーションを追加する

XPSファイルにグラデーションを追加する必要がある場合があります。 APIを使用すると、線形、水平、および垂直のグラデーションを追加できるため、XPSファイルを操作できます。 XPSファイルに次のグラデーションを追加しましょう。

C++を使用してXPSファイルに垂直グラデーションを追加する

いくつかの簡単なAPI呼び出しで、XPSファイルに垂直方向のグラデーションを簡単に追加できます。垂直方向のグラデーションを追加する手順は次のとおりです。

  1. 新しいXPSドキュメントを作成します
  2. XpsGradientStopのリストを初期化します
  3. ジオメトリを定義して新しいパスを作成します
  4. 結果のXPSドキュメントを保存する

以下のコードは、これらの手順に基づいており、C++を使用してXPSファイルに垂直方向のグラデーションを追加する方法を示しています。

// 新しいXPSドキュメントを作成する
auto doc = System::MakeObject<XpsDocument>();

// XpsGradientStopのリストを初期化します
auto stops = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<XpsGradientStop>>>();
stops->Add(doc->CreateGradientStop(doc->CreateColor(253, 255, 12, 0), 0.f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(252, 255, 154, 0), 0.359375f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(252, 255, 56, 0), 0.424805f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(253, 255, 229, 0), 0.879883f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(252, 255, 255, 234), 1.f));

// 省略形でジオメトリを定義して、新しいパスを作成します
System::SharedPtr<XpsPath> path = doc->AddPath(doc->CreatePathGeometry(u"M 10,110 L 228,110 228,200 10,200"));
path->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 20.f, 70.f));
path->set_Fill(doc->CreateLinearGradientBrush(System::Drawing::PointF(10.f, 110.f), System::Drawing::PointF(10.f, 200.f)));
(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsGradientBrush>(path->get_Fill()))->get_GradientStops()->AddRange(stops);

// 結果のXPSドキュメントを保存する
doc->Save(RunExamples::outDir() + u"AddVerticalGradient_out.xps");

C++を使用してXPSに水平グラデーションを追加する

XPSファイルのグラデーションのもう1つの可能なバリエーションは、水平方向のグラデーションです。水平方向のグラデーションを追加するアプローチは、上記で説明したユースケースに少し関連しています。水平方向のグラデーションを追加するために従う必要のある手順は次のとおりです。

  1. 新しいXPSドキュメントを作成する
  2. XpsGradientStopを使用してグラデーションストップを指定します
  3. ジオメトリを使用してパスを作成する
  4. 出力XPSドキュメントを保存する

次のコードスニペットは、C++を使用してXPSファイルに水平方向のグラデーションを追加する方法を詳しく説明しています。

// 新しいXPSドキュメントを作成する
auto doc = System::MakeObject<XpsDocument>();

// XpsGradientStopのリストを初期化します
System::SharedPtr<System::Collections::Generic::List<System::SharedPtr<XpsGradientStop>>> stops = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<XpsGradientStop>>>();
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 244, 253, 225), 0.0673828f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 251, 240, 23), 0.314453f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 252, 209, 0), 0.482422f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 241, 254, 161), 0.634766f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 53, 253, 255), 0.915039f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 12, 91, 248), 1.f));

// 省略形でジオメトリを定義して、新しいパスを作成します
System::SharedPtr<XpsPath> path = doc->AddPath(doc->CreatePathGeometry(u"M 10,210 L 228,210 228,300 10,300"));
path->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 20.f, 70.f));
path->set_Fill(doc->CreateLinearGradientBrush(System::Drawing::PointF(10.f, 0.f), System::Drawing::PointF(228.f, 0.f)));
(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsGradientBrush>(path->get_Fill()))->get_GradientStops()->AddRange(stops);

// 結果のXPSドキュメントを保存する
doc->Save(RunExamples::outDir() + u"AddHorizontalGradient_out.xps");

C++でXPSファイルにグリッドを挿入します

Aspose.Page for C++ APIを使用すると、レンダリングを制御するための多くのプロパティを使用して、XPSファイルでグリッドをレンダリングできます。 C++ベースのアプリケーションのXPSファイルにグリッドを挿入する例を考えてみましょう。以下の手順を検討することで、この機能を使用できます。

  1. XpsDocumentクラスオブジェクトを初期化します
  2. グリッドのジオメトリを指定しますVisualBrush
  3. マゼンタグリッドVisualBrushのCanvasを作成します
  4. ビジュアルブラシを作成し、グリッドを追加します
  5. 出力XPSファイルを保存する

以下のコードは、C++を使用してXPSファイルにグリッドを挿入する方法を説明する次の手順に基づいています。

auto doc = System::MakeObject<XpsDocument>();

// マゼンタグリッドVisualBrushのジオメトリ
System::SharedPtr<XpsPathGeometry> pathGeometry = doc->CreatePathGeometry();
pathGeometry->AddSegment(doc->CreatePolyLineSegment(System::MakeArray<System::Drawing::PointF>({ System::Drawing::PointF(240.f, 5.f), System::Drawing::PointF(240.f, 310.f), System::Drawing::PointF(0.f, 310.f) })));
pathGeometry->idx_get(0)->set_StartPoint(System::Drawing::PointF(0.f, 5.f));

// マゼンタグリッドのキャンバスVisualBrush
System::SharedPtr<XpsCanvas> visualCanvas = doc->CreateCanvas();

System::SharedPtr<XpsPath> visualPath = visualCanvas->AddPath(doc->CreatePathGeometry(u"M 0,4 L 4,4 4,0 6,0 6,4 10,4 10,6 6,6 6,10 4,10 4,6 0,6 Z"));
visualPath->set_Fill(doc->CreateSolidColorBrush(doc->CreateColor(1.f, .61f, 0.1f, 0.61f)));

System::SharedPtr<XpsPath> gridPath = doc->CreatePath(pathGeometry);

//ビジュアルブラシを作成します。これは、いくつかのXPSフラグメント(ベクターグラフィックスとグリフ)によって指定されます。
gridPath->set_Fill(doc->CreateVisualBrush(visualCanvas, System::Drawing::RectangleF(0.f, 0.f, 10.f, 10.f), System::Drawing::RectangleF(0.f, 0.f, 10.f, 10.f)));
(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsVisualBrush>(gridPath->get_Fill()))->set_TileMode(Aspose::Page::Xps::XpsModel::XpsTileMode::Tile);

// 新しいキャンバス
System::SharedPtr<XpsCanvas> canvas = doc->AddCanvas();
canvas->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 268.f, 70.f));

// グリッドを追加
canvas->AddPath(gridPath);

// 真ん中の上部にある赤い透明な長方形
System::SharedPtr<XpsPath> path = canvas->AddPath(doc->CreatePathGeometry(u"M 30,20 l 258.24,0 0,56.64 -258.24,0 Z"));
path = canvas->AddPath(doc->CreatePathGeometry(u"M 10,10 L 228,10 228,100 10,100"));
path->set_Fill(doc->CreateSolidColorBrush(doc->CreateColor(1.0f, 0.0f, 0.0f)));
path->set_Opacity(0.7f);

// 結果のXPSドキュメントを保存する
doc->Save(RunExamples::outDir() + u"AddGrid_out.xps");

C++を使用してXPSファイルに透過オブジェクトを挿入します

XPSファイルを操作するためのもう1つのエキサイティングな機能は、透明度と不透明度のサポートです。さまざまなシナリオで、XPSファイルに透過オブジェクトを追加する必要がある場合があります。これは、次の手順を使用して実現できます。

  1. 新しいXPSドキュメントを作成する
  2. 閉じた長方形のジオメトリでパスを作成する
  3. さまざまなパスのジオメトリを追加する
  4. 出力XPSドキュメントを保存する

これらの手順の後に、C++プログラミング言語を使用してXPSファイルに透過オブジェクトを追加する方法を示す次のコードが続きます。

// 新しいXPSドキュメントを作成する
auto doc = System::MakeObject<XpsDocument>();

// 透明性を示すためだけに
doc->AddPath(doc->CreatePathGeometry(u"M120,0 H400 v1000 H120"))->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Gray()));
doc->AddPath(doc->CreatePathGeometry(u"M300,120 h600 V420 h-600"))->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Gray()));

// 閉じた長方形のジオメトリでパスを作成する
System::SharedPtr<XpsPath> path1 = doc->CreatePath(doc->CreatePathGeometry(u"M20,20 h200 v200 h-200 z"));
// パス1を塗りつぶすように青い塗りつぶしブラシを設定します
path1->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// 現在のページに追加します
System::SharedPtr<XpsPath> path2 = doc->Add(path1);

// path1とpath2は、path1が他の要素内に配置されていない限り同じです。
// (つまり、path1には親要素がありませんでした)。
// そのため、ページ上の長方形の色は効果的に緑色に変わります
path2->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Green()));

// ここで、path2をもう一度追加します。これで、path2に親があります。したがって、path3はpath2と同じにはなりません。
// したがって、新しい長方形がページに描画されます...
System::SharedPtr<XpsPath> path3 = doc->Add(path2);
// ...そしてそれを300ユニット下にシフトします...
path3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 300.0f));
// ...そしてそれを埋めるために赤い塗りつぶしブラシを設定します
path3->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Red()));

// path2のジオメトリを使用して新しいpath4を作成します...
System::SharedPtr<XpsPath> path4 = doc->AddPath(path2->get_Data());
// ...300単位右にシフトします...
path4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 300.0f, 0.0f));
// ...そして青い塗りつぶしを設定します
path4->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));

// path4をもう一度追加します。
System::SharedPtr<XpsPath> path5 = doc->Add(path4);
// path4とpath5は再び同じではありません...
// (path5を300ユニット下に移動します)
path5->set_RenderTransform(path5->get_RenderTransform()->Clone());
// RenderTransform値をpath4から切断するには(Fillプロパティに関する次のコメントを参照)
path5->get_RenderTransform()->Translate(0.0f, 300.0f);
// ...ただし、Fillプロパティの不透明度を設定すると、path5とpath4の両方で有効になります。
// ブラシは複雑なプロパティ値であり、path5とpath4で同じままであるためです。
path5->get_Fill()->set_Opacity(0.8f);

// path2のジオメトリを使用して新しいpath6を作成します...
System::SharedPtr<XpsPath> path6 = doc->AddPath(path2->get_Data());
// ...それを600単位右にシフトします...
path6->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 600.0f, 0.0f));
// ...そして黄色の塗りつぶしを設定します
path6->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Yellow()));

// 次に、path6のクローンを追加します...
System::SharedPtr<XpsPath> path7 = doc->Add(path6->Clone());
// (path5を300ユニット下に移動します)
path7->set_RenderTransform(path7->get_RenderTransform()->Clone());
path7->get_RenderTransform()->Translate(0.0f, 300.0f);
// ...そしてpath7の不透明度を設定します
path7->get_Fill()->set_Opacity(0.8f);
// プロパティ値が要素とともに複製されるとすぐに、不透明度が独立して影響するようになりました

// 次のコードブロックは、前のコードブロックと同等です。
// path6自体を追加します。 path6とpath7は同じではありません。それらのFillプロパティ値は同じですが 
//XpsPath path7 = doc.Add(path6);
//path7.RenderTransform = path7.RenderTransform.Clone();
//path7.RenderTransform.Translate(0、300);
// path7のFillプロパティをpath6のFillプロパティから「切断」するには、path7のFillプロパティをそのクローン(またはpath6のFillクローン)に再割り当てします。
//path7.Fill =((XpsSolidColorBrush)path7.Fill).Clone();
//path7.Fill.Opacity = 0.8f;

// 結果のXPSドキュメントを保存する
doc->Save(RunExamples::outDir() + u"WorkingWithTransparency_out.xps");

結論

一言で言えば、XPSファイルを操作するための多くの機能を調査しました。 XPSファイルには、グラデーション、線形、水平、または垂直のほか、グリッドまたは透明なオブジェクトを追加できます。さらに、Examplesプロジェクトをダウンロードすると、他のいくつかの機能を確認できます。あいまいな点がありましたら、無料サポートフォーラムまでお気軽にご連絡ください。私たちはあなたを案内することを光栄に思います!

関連項目