Arbeiten mit Transparenz | C++
Legen Sie die Deckkraftmaske fest
Legen Sie das Deckkraftmaskenobjekt fest
Es ist möglich, eine Deckkraftmaske für ein XPS-Dokument festzulegen. Aspose.Page für C++ kann zum Erstellen/Lesen eines XPS-Dokuments und zum Festlegen einer Deckkraftmaske für solche Dokumente verwendet werden. Die API verwendet das Bild als Deckkraftmaske, wobei die Alpha-Komponente jedes Pixels zum Auftragen auf die darunter liegende Füllung verwendet wird. Das resultierende XPS-Dokument zeigt schräge Verlaufsstreifen, wie sie über der Quellbilddatei vorhanden sind. Um die Deckkraftmaske für ein XPS-Dokument festzulegen, können Sie die folgenden Schritte ausführen.
- Erstellen Sie ein neues Objekt der XpsDocument-Klasse
- Fügen Sie mithilfe der XpsCanvas-Klasse eine Leinwand zum Dokumentobjekt hinzu
- Erstellen Sie eine Objektklasse XpsPath mit den erforderlichen Parametern
- Legen Sie die Deckkraftmaske auf dem Pfad fest
- Erstellen Sie ein XpsImageBrush-Klassenobjekt
- Speichern Sie das Dokument mit der Speichermethode auf der Disc
1For complete examples and data files, please go to https://github.com/aspose-page/Aspose.Page-for-C
2// Create new XPS Document
3System::SharedPtr<XpsDocument> doc = System::MakeObject<XpsDocument>();
4//Add Canvas to XpsDocument instance
5System::SharedPtr<XpsCanvas> canvas = doc->AddCanvas();
6// Rectangle with opacity masked by ImageBrush
7System::SharedPtr<XpsPath> path = canvas->AddPath(doc->CreatePathGeometry(u"M 10,180 L 228,180 228,285 10,285"));
8path->set_Fill(doc->CreateSolidColorBrush(doc->CreateColor(1.0f, 0.0f, 0.0f)));
9path->set_OpacityMask(doc->CreateImageBrush(dataDir() + u"R08SY_NN.tif", System::Drawing::RectangleF(0.f, 0.f, 128.f, 192.f), System::Drawing::RectangleF(0.f, 0.f, 64.f, 96.f)));
10(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsImageBrush>(path->get_OpacityMask()))->set_TileMode(Aspose::Page::Xps::XpsModel::XpsTileMode::Tile);
11// Save resultant XPS document
12doc->Save(outDir() + u"OpacityMask_out.xps");
Fügen Sie ein transparentes Objekt im XPS-Dokument hinzu
Transparentes Objekt hinzufügen
Mit Aspose.Page für C++ können Sie transparente Objekte zu einem XPS-Dokument in Ihren Anwendungen hinzufügen. Um dies mit einfachem Code zu erreichen, wird die Klasse XpsPath verwendet. Um dem XPS-Dokument ein transparentes Objekt hinzuzufügen, können die folgenden Schritte verwendet werden.
- Erstellen Sie ein neues Objekt mit der Klasse XpsDocument.
- Erstellen Sie ein XpsPath-Objekt mit den erforderlichen Parametern
- Legen Sie die Rendering-Transformationsinformationen für den Pfad fest
- Verwenden Sie die Methode set_Opacity, um den Opazitätswert anzugeben
- Speichern Sie das XPS-Dokument mit der Save-Methode.
1For complete examples and data files, please go to https://github.com/aspose-page/Aspose.Page-for-C
2// Create new XPS Document
3auto doc = System::MakeObject<XpsDocument>();
4
5// Just to demonstrate transparency
6doc->AddPath(doc->CreatePathGeometry(u"M120,0 H400 v1000 H120"))->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Gray()));
7doc->AddPath(doc->CreatePathGeometry(u"M300,120 h600 V420 h-600"))->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Gray()));
8
9// Create path with closed rectangle geometry
10System::SharedPtr<XpsPath> path1 = doc->CreatePath(doc->CreatePathGeometry(u"M20,20 h200 v200 h-200 z"));
11// Set blue solid brush to fill path1
12path1->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
13// Add it to the current page
14System::SharedPtr<XpsPath> path2 = doc->Add(path1);
15
16// path1 and path2 are the same as soon as path1 hasn't been placed inside any other element
17// (which means that path1 had no parent element).
18// Because of that rectangle's color on the page effectively turns to green
19path2->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Green()));
20
21// Now add path2 once again. Now path2 has parent. So path3 won't be the same as path2.
22// Thus a new rectangle is painted on the page ...
23System::SharedPtr<XpsPath> path3 = doc->Add(path2);
24// ... and we shift it 300 units lower ...
25path3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 300.0f));
26// ... and set red solid brush to fill it
27path3->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Red()));
28
29// Create new path4 with path2's geometry ...
30System::SharedPtr<XpsPath> path4 = doc->AddPath(path2->get_Data());
31// ... shift it 300 units to the right ...
32path4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 300.0f, 0.0f));
33// ... and set blue solid fill
34path4->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
35
36// Add path4 once again.
37System::SharedPtr<XpsPath> path5 = doc->Add(path4);
38// path4 and path5 are not the same again ...
39// (move path5 300 units lower)
40path5->set_RenderTransform(path5->get_RenderTransform()->Clone());
41// to disconnect RenderTransform value from path4 (see next comment about Fill property)
42path5->get_RenderTransform()->Translate(0.0f, 300.0f);
43// ... but if we set the opacity of Fill property, it will take effect on both path5 and path4
44// because brush is a complex property value which remains the same for path5 and path4
45path5->get_Fill()->set_Opacity(0.8f);
46
47// Create new path6 with path2's geometry ...
48System::SharedPtr<XpsPath> path6 = doc->AddPath(path2->get_Data());
49// ... shift it 600 units to the right ...
50path6->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 600.0f, 0.0f));
51// ... and set yellow solid fill
52path6->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Yellow()));
53
54// Now add path6's clone ...
55System::SharedPtr<XpsPath> path7 = doc->Add(path6->Clone());
56// (move path5 300 units lower)
57path7->set_RenderTransform(path7->get_RenderTransform()->Clone());
58path7->get_RenderTransform()->Translate(0.0f, 300.0f);
59// ... and set opacity for path7
60path7->get_Fill()->set_Opacity(0.8f);
61// Now opacity effects independantly as soon as property values are cloned along with the element
62
63// The following code block is equivalent to the previous one.
64// Add path6 itself. path6 and path7 are not the same. Although their Fill property values are the same
65//XpsPath path7 = doc.Add(path6);
66//path7.RenderTransform = path7.RenderTransform.Clone();
67//path7.RenderTransform.Translate(0, 300);
68// To "disconnect" path7's Fill property from path6's Fill property reassign it to its clone (or path6's Fill clone)
69//path7.Fill = ((XpsSolidColorBrush)path7.Fill).Clone();
70//path7.Fill.Opacity = 0.8f;
71
72// Save resultant XPS document
73doc->Save(outDir() + u"WorkingWithTransparency_out.xps");
Das Ergebnis sieht so aus