|
Déclare un maillage triangulaire ombré Gouraud en forme libre pour PDF 1.3+ (ISO 32000-1 8.7.4.5.4, /ShadingType 4) et l’enveloppe dans une entrée inline Pattern Type 2 du dictionnaire Resources/Pattern de la page Utilisez le nom de motif renvoyé avec THPDFPage.SetFillPattern ou THPDFPage.SetStrokePattern pour peindre un dégradé vectoriel dont la couleur varie en douceur sur chaque triangle
Syntaxe Delphi :
function RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax: Single; NumComponents: Integer; const Vertices: array of Extended): AnsiString;
Syntaxe C++ :
AnsiString RegisterFreeFormGouraudShading(float XMin, float YMin, float XMax, float YMax, int NumComponents, const Extended* Vertices, int VertexElementCount);
Description
L’ombrage est émis comme un seul flux indirect avec /ShadingType 4, /BitsPerCoordinate 16, /BitsPerComponent 8 et /BitsPerFlag 8 Chaque sommet est empaqueté dans l’ordre du flux sous la forme de 8 + NumComponents − 3 octets - un octet de drapeau (toujours 0 pour les triangles indépendants), 2 octets big-endian pour la coordonnée X, 2 octets big-endian pour la coordonnée Y et NumComponents composantes couleur sur 8 bits Le tableau /Decode remappe les coordonnées 16 bits vers le rectangle d’espace utilisateur [XMin, XMax] x [YMin, YMax] fourni et chaque composante couleur vers [0, 1]
Les sommets sont consommés par groupes de trois comme triangles indépendants Le nombre de valeurs Extended que vous passez dans Vertices doit être exactement (2 + NumComponents) * 3 * TriangleCount ; l’aide lève une exception lorsque la longueur du tableau n’est pas un multiple de la stride ou lorsque le nombre de sommets n’est pas un multiple de trois
XMin, YMin, XMax, YMax - le rectangle d’espace utilisateur qui délimite le maillage Ces quatre valeurs deviennent les quatre premières entrées de /Decode afin que les coordonnées des sommets encodées sur 16 bits reviennent dans l’espace utilisateur PDF Placez-les dans les mêmes coordonnées d’espace utilisateur que celles dans lesquelles vous allez peindre - pour le Rectangle en coordonnées écran de HotPDF en (X, Y, W, H), le rectangle d’espace utilisateur PDF correspondant est (X, PageHeight - Y - H) à (X + W, PageHeight - Y)
NumComponents - nombre de composantes couleur par sommet Passez 1 pour DeviceGray, 3 pour DeviceRGB ou 4 pour DeviceCMYK Toute autre valeur lève une exception L’entrée /ColorSpace de l’ombrage résultant est définie en conséquence
Vertices - tableau plat de valeurs Extended dans l’ordre (X, Y, c1...cN), répété pour chaque sommet Les coordonnées sont bornées à la boîte [XMin, XMax] x [YMin, YMax] et quantifiées en entiers 16 bits ; les composantes de couleur sont bornées à [0, 1] et quantifiées en entiers 8 bits Les triangles adjacents qui doivent partager une arête doivent répéter les sommets partagés à l’identique, car le shading enregistré utilise un flag de 0 pour chaque sommet (triangles indépendants)
Valeur de retour : un nom de motif généré automatiquement (Sh1, Sh2, ...) enregistré dans le dictionnaire Resources/Pattern de la page courante Renvoie une chaîne vide lorsque StrictVersionLock est activé et que la Version active est inférieure à PDF 1.3 (sinon la version du document passe automatiquement à 1.3)
Exemple de code
// Four-corner colour quad split into two independent triangles
// along the top-left -> bot-right diagonal. The colours blend
// smoothly across the mesh; the diagonal is the ridge where the
// two triangles meet
//
// top-left red -- top-right green
// | |
// bot-left blue -- bot-right yellow
var
Doc: THotPDF;
PatName: AnsiString;
Verts: array[0..29] of Extended;
H, XMin, YMin, XMax, YMax: Single;
begin
Doc := THotPDF.Create(nil);
try
Doc.Version := pdf14;
Doc.BeginDoc;
H := Doc.CurrentPage.Height;
XMin := 0; YMin := H - 200; XMax := 200; YMax := H;
// triangle A: top-left red, top-right green, bot-right yellow
Verts[ 0] := XMin; Verts[ 1] := YMax; Verts[ 2] := 1.0; Verts[ 3] := 0.0; Verts[ 4] := 0.0;
Verts[ 5] := XMax; Verts[ 6] := YMax; Verts[ 7] := 0.0; Verts[ 8] := 1.0; Verts[ 9] := 0.0;
Verts[10] := XMax; Verts[11] := YMin; Verts[12] := 1.0; Verts[13] := 1.0; Verts[14] := 0.0;
// triangle B: top-left red, bot-right yellow, bot-left blue
Verts[15] := XMin; Verts[16] := YMax; Verts[17] := 1.0; Verts[18] := 0.0; Verts[19] := 0.0;
Verts[20] := XMax; Verts[21] := YMin; Verts[22] := 1.0; Verts[23] := 1.0; Verts[24] := 0.0;
Verts[25] := XMin; Verts[26] := YMin; Verts[27] := 0.0; Verts[28] := 0.0; Verts[29] := 1.0;
PatName := Doc.RegisterFreeFormGouraudShading(
XMin, YMin, XMax, YMax, 3, Verts);
Doc.CurrentPage.SetFillPattern(PatName);
Doc.CurrentPage.Rectangle(0, 0, 200, 200);
Doc.CurrentPage.Fill;
Doc.EndDoc;
finally
Doc.Free;
end;
end;
Voir aussi
RegisterDeviceN, RegisterSeparation, RegisterLabColorSpace, Version, Prise en charge des filtres PDF
|