Condividi tramite


Metodo GraphicsPath::Warp (gdipluspath.h)

Il metodo GraphicsPath::Warp applica una trasformazione warp a questo percorso. Il metodo GraphicsPath::Warp esegue anche l'appiattizione (converte in una sequenza di linee rette) il percorso.

Sintassi

Status Warp(
  [in]      const PointF  *destPoints,
  [in]      INT           count,
  [in, ref] const RectF & srcRect,
  [in]      const Matrix  *matrix,
  [in]      WarpMode      warpMode,
  [in]      REAL          flatness
);

Parametri

[in] destPoints

Tipo: const PointF*

Puntatore a una matrice di punti che, insieme al parametro srcRect , definisce la trasformazione di distorsione.

[in] count

Tipo: INT

Intero che specifica il numero di punti nella matrice destPoints . Il valore di questo parametro deve essere 3 o 4.

[in, ref] srcRect

Tipo: const RectF

Riferimento a un rettangolo che, insieme al parametro destPoints , definisce la trasformazione di distorsione.

[in] matrix

Tipo: matrice const *

facoltativo. Puntatore a un oggetto Matrix che rappresenta una trasformazione da applicare insieme alla distorsione. Se questo parametro è NULL, non viene applicata alcuna trasformazione. Il valore predefinito è NULL.

[in] warpMode

Tipo: WarpMode

facoltativo. Elemento dell'enumerazione WarpMode che specifica il tipo di distorsione da applicare. Il valore predefinito è WarpModePerspective.

[in] flatness

Tipo: REAL

facoltativo. Numero reale che influenza il numero di segmenti di linea utilizzati per approssimare il percorso originale. I valori piccoli specificano che vengono usati molti segmenti di linea e i valori di grandi dimensioni specificano che vengono usati pochi segmenti di riga. Il valore predefinito è FlatnessDefault, che è una costante definita in Gdiplusenums.h.

Valore restituito

Tipo: Stato

Se il metodo ha esito positivo, restituisce Ok, che è un elemento dell'enumerazione Status .

Se il metodo ha esito negativo, restituisce uno degli altri elementi dell'enumerazione Status .

Commenti

Un oggetto GraphicsPath archivia una raccolta di punti dati che rappresentano linee e curve. Il metodo GraphicsPath::Warp converte i punti dati in modo che rappresentino solo le righe. Il parametro flatness influisce sul numero di righe archiviate. I punti dati originali che rappresentano le curve vengono persi.

Se il parametro count ha un valore pari a 4, la trasformazione warp viene definita come illustrato nella tabella seguente.

Punto di origine Punto di destinazione
Angolo superiore sinistro di srcRect destPoints[0]
Angolo superiore destro di srcRect destPoints[1]
Angolo inferiore sinistro di srcRect destPoints[2]
Angolo inferiore destro di srcRect destPoints[3]
 

Una trasformazione specificata da un rettangolo di origine e quattro punti di destinazione è in grado di eseguire il mapping di un rettangolo a un quadrilatero arbitrario che non è necessariamente un parallelogramma.

Se il parametro count ha un valore pari a 3, la trasformazione warp viene definita come illustrato nella tabella seguente.

Punto di origine Punto di destinazione
Angolo superiore sinistro di srcRect destPoints[0]
Angolo superiore destro di srcRect destPoints[1]
Angolo inferiore sinistro di srcRect destPoints[2]
 

Una trasformazione specificata da un rettangolo di origine e tre punti di destinazione esegue il mapping dei rettangoli ai parallelgrammi.

Esempio

Nell'esempio seguente viene creato un oggetto GraphicsPath e viene aggiunta una figura chiusa al percorso. Il codice definisce una trasformazione di distorsione specificando un rettangolo di origine e una matrice di quattro punti di destinazione. Il rettangolo di origine e i punti di destinazione vengono passati al metodo Warp . Il codice disegna il percorso due volte: una volta prima che sia stato sottoposto a distorsione e una volta dopo che è stato sottoposto a distorsione.


VOID WarpExample(HDC hdc)
{
   Graphics graphics(hdc);

   // Create a path.
   PointF points[] ={
      PointF(20.0f, 60.0f),
      PointF(30.0f, 90.0f),
      PointF(15.0f, 110.0f),
      PointF(15.0f, 145.0f),
      PointF(55.0f, 145.0f),
      PointF(55.0f, 110.0f),
      PointF(40.0f, 90.0f),
      PointF(50.0f, 60.0f)};

   GraphicsPath path;
   path.AddLines(points, 8);
   path.CloseFigure();

   // Draw the path before applying a warp transformation.
   Pen bluePen(Color(255, 0, 0, 255));
   graphics.DrawPath(&bluePen, &path);

   // Define a warp transformation, and warp the path.
   RectF srcRect(10.0f, 50.0f, 50.0f, 100.0f);

   PointF destPts[] = {
      PointF(220.0f, 10.0f),
      PointF(280.0f, 10.0f),
      PointF(100.0f, 150.0f),
      PointF(400.0f, 150.0f)};

   path.Warp(destPts, 4, srcRect);

   // Draw the warped path.
   graphics.DrawPath(&bluePen, &path);

   // Draw the source rectangle and the destination polygon.
   Pen blackPen(Color(255, 0, 0, 0));
   graphics.DrawRectangle(&blackPen, srcRect);
   graphics.DrawLine(&blackPen, destPts[0], destPts[1]);
   graphics.DrawLine(&blackPen, destPts[0], destPts[2]);
   graphics.DrawLine(&blackPen, destPts[1], destPts[3]);
   graphics.DrawLine(&blackPen, destPts[2], destPts[3]);
}

Requisiti

Requisito Valore
Client minimo supportato Windows XP, Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione gdipluspath.h (include Gdiplus.h)
Libreria Gdiplus.lib
DLL Gdiplus.dll

Vedi anche

Ritaglio con un'area

Costruzione e creazione di percorsi

Creazione di una sfumatura di percorso

Percorsi flat

GraphicsPath

GraphicsPath::Flatten

GraphicsPath::Outline

GraphicsPath::Widen

Matrice

Percorsi

WarpMode