GraphicsPath::Metode Warp (gdipluspath.h)

Metode GraphicsPath::Warp menerapkan transformasi warp ke jalur ini. Metode GraphicsPath::Warp juga meratakan (dikonversi ke urutan garis lurus) jalur.

Sintaks

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

Parameter

[in] destPoints

Jenis: const PointF*

Penunjuk ke array titik yang, bersama dengan parameter srcRect , mendefinisikan transformasi warp.

[in] count

Jenis: INT

Bilangan bulat yang menentukan jumlah titik dalam array destPoints . Nilai parameter ini harus 3 atau 4.

[in, ref] srcRect

Jenis: const RectF

Referensi ke persegi panjang yang, bersama dengan parameter destPoints , mendefinisikan transformasi warp.

[in] matrix

Jenis: const Matrix*

Pilihan. Penunjuk ke objek Matriks yang mewakili transformasi yang akan diterapkan bersama dengan warp. Jika parameter ini NULL, tidak ada transformasi yang diterapkan. Nilai defaultnya adalah NULL.

[in] warpMode

Jenis: WarpMode

Opsional. Elemen enumerasi WarpMode yang menentukan jenis warp yang akan diterapkan. Nilai defaultnya adalah WarpModePerspective.

[in] flatness

Jenis: NYATA

Opsional. Angka riil yang memengaruhi jumlah segmen garis yang digunakan untuk mempertanyakan jalur asli. Nilai kecil menentukan bahwa banyak segmen garis digunakan, dan nilai besar menentukan bahwa beberapa segmen garis digunakan. Nilai defaultnya adalah FlatnessDefault, yang merupakan konstanta yang ditentukan dalam Gdiplusenums.h.

Mengembalikan nilai

Jenis: Status

Jika metode berhasil, metode mengembalikan Ok, yang merupakan elemen dari enumerasi Status .

Jika metode gagal, metode mengembalikan salah satu elemen lain dari enumerasi Status .

Keterangan

Objek GraphicsPath menyimpan kumpulan titik data yang mewakili garis dan kurva. Metode GraphicsPath::Warp mengonversi titik data tersebut sehingga hanya mewakili baris. Parameter kerataan memengaruhi jumlah baris yang disimpan. Titik data asli yang mewakili kurva hilang.

Jika parameter hitungan memiliki nilai 4, transformasi warp didefinisikan seperti yang ditunjukkan dalam tabel berikut.

Titik sumber Titik tujuan
Sudut kiri atas srcRect destPoints[0]
Sudut kanan atas srcRect destPoints[1]
Sudut kiri bawah srcRect destPoints[2]
Sudut kanan bawah srcRect destPoints[3]
 

Transformasi yang ditentukan oleh persegi panjang sumber dan empat titik tujuan mampu memetakan persegi panjang ke kuadrilateral arbitrer yang belum tentu merupakan parallelogram.

Jika parameter hitungan memiliki nilai 3, transformasi warp didefinisikan seperti yang ditunjukkan dalam tabel berikut.

Titik sumber Titik tujuan
Sudut kiri atas srcRect destPoints[0]
Sudut kanan atas srcRect destPoints[1]
Sudut kiri bawah srcRect destPoints[2]
 

Transformasi yang ditentukan oleh persegi panjang sumber dan tiga titik tujuan memetakan persegi panjang ke parallelogram.

Contoh

Contoh berikut membuat objek GraphicsPath dan menambahkan gambar tertutup ke jalur. Kode mendefinisikan transformasi warp dengan menentukan persegi panjang sumber dan array empat titik tujuan. Persegi panjang sumber dan titik tujuan diteruskan ke metode Warp . Kode menarik jalur dua kali: sekali sebelum dibersihkan dan sekali setelah dibersihkan.


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]);
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP, Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header gdipluspath.h (termasuk Gdiplus.h)
Pustaka Gdiplus.lib
DLL Gdiplus.dll

Lihat juga

Kliping dengan Wilayah

Membuat dan Menggambar Jalur

Membuat Gradien Jalur

Meratakan Jalur

GraphicsPath

GraphicsPath::Flatten

GraphicsPath::Kerangka

GraphicsPath::Widen

Matrix

Jalan

WarpMode